All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.siani.itrules.dsl.ItrLexer.g4 Maven / Gradle / Ivy

Go to download

itrules is a Java-based Template Engine. It can generate HTML, XML, SQL, JSON or any other documents from templates. Java code can be separated from the View, allowing to develop applications according to the Model View Controller (MVC).

The newest version!
lexer grammar ItrLexer;

@lexer::members {
	int lastMode = 0;
	boolean inBody = false;
	private void setLastMode(int i) {
		lastMode = i;
	}

	public int getLastMode() {
        return lastMode;
    }

    public boolean markHasParameters() {
        if (getCharIndex() == this.getInputStream().toString().length()) return false;
        char c = this.getInputStream().toString().charAt(getCharIndex());
        String next = "";
        if (getCharIndex() + 3 < getInputStream().toString().length())
            next = this.getInputStream().toString().substring(getCharIndex(), getCharIndex() + 3);
        return (c == '+' || next.equals("..."));
    }

    public void setMode(int newMode) {
        _mode = newMode;
    }

    public void exitMark() {
        if(!markHasParameters()) {
			setMode(lastMode);
			setLastMode(MARK_MODE);
        }
    }
}


BEGIN_RULE             : 'def'                                  { setMode(SIGNATURE_MODE); setLastMode(DEFAULT_MODE);};
WL                     : (' '|'\t')* ('\r'? '\n' | '\n')        -> skip;
BEGIN_BODY             : 'body'                          		-> skip;
COMMENT                : .;

mode SIGNATURE_MODE;
	NOT                : '!';
	FUNCTION           : LETTER(DIGIT|LETTER|SCORE)*;
	END_SIGNATURE      : (' '|'\t')* NL ('\t' | '    ')?        { setLastMode(SIGNATURE_MODE); setType(BEGIN_BODY);} -> mode(BODY_MODE);
	WS                 : SP+                                    -> skip;
	PARAMETERS         : ('(' ~(')')+ ')')| ('('')');
	RULE_ERROR         : .;

mode BODY_MODE;
	END_RULE           : NL? 'end'                              { setMode(DEFAULT_MODE); setLastMode(BODY_MODE);};
	NEWLINE            : NL ('\t' | '    ')?                    { setText("\n"); setType(TEXT);};
	DOLLAR             : '$$'                                   { setText("$"); setType(TEXT);};
	LSB                : '$['                                   { setText("["); setType(TEXT);};
	RSB                : '$]'                                   { setText("]"); setType(TEXT);};
	TRIGGER            : '$'                                    { setMode(MARK_MODE); setLastMode(BODY_MODE);};
	BEGIN_EXPRESSION   : '['                                    { setMode(EXPRESSION_MODE); setLastMode(BODY_MODE);};
	NULL_SEPARATOR     : '~'                                    -> skip;
	TEXT               : ~('$'| '['  | '\r' | '\n' | '~')+;

mode MARK_MODE;
	LIST               : '...';
	OPTION             : '+'                                    { setType(OPTION);};
    NULL               : '~'                                    { setMode(lastMode); setLastMode(MARK_MODE);}-> skip;
	SEPARATOR          : '[' (~']')* ']'                        { setMode(lastMode); setLastMode(MARK_MODE);};
	ID                 : (LETTER) (DIGIT|LETTER | '_' | '-')* (DIGIT|LETTER)       { setType(ID); exitMark();};
	MARK_ERROR         : .;

mode EXPRESSION_MODE;
	ELSE			   : '?';
	END_EXPRESSION     : ']'                                    { setLastMode(EXPRESSION_MODE);} -> mode(BODY_MODE);
	EXPRESSION_DOLLAR  : '$$'                                   { setText("$"); setType(TEXT);};
    EXPRESSION_LSB     : '$['                                   { setText("["); setType(TEXT);};
    EXPRESSION_RSB     : '$]'                                   { setText("]"); setType(TEXT);};
	EXPRESSION_NULL    : '~'                                    -> skip;
	EXPRESSION_TRIGGER : '$'                                    { setType(TRIGGER); setLastMode(EXPRESSION_MODE);} -> mode(MARK_MODE);
	EXPRESSION_TEXT    : ~('?' |'$'| '[' | ']' | '\n')+         { setType(TEXT);};
	EXPRESSION_NL      : NL ('\t' | '    ')?                    { setText("\n"); setType(TEXT);};
	EXPRESSION_ERROR   : .;

fragment
   	NL              : ('\r'? '\n' | '\n');
fragment
	SP              : (' ' | '\t');
fragment
	DIGIT           :[0-9];
fragment
	LETTER          : 'a'..'z' | 'A'..'Z';
fragment
	SCORE           : '-' | '_';





© 2015 - 2025 Weber Informatics LLC | Privacy Policy