Lexical grammar G = (N,T,P,S) N = { TOKEN_NEWLINE, TOKEN_WORD, TOKEN_STRING, TOKEN_INT, TOKEN_FLOAT, TOKEN_BOOL, TOKEN_LPAREN, TOKEN_RPAREN, TOKEN_LBRACE, TOKEN_RBRACE, TOKEN_LBRACKET, TOKEN_RBRACKET, TOKEN_COMMA, TOKEN_SEMICOLON, TOKEN_ADD, TOKEN_SUB, TOKEN_MUL, TOKEN_DIV, TOKEN_MOD, TOKEN_EQUAL, TOKEN_ASSIGN, TOKEN_NEQUAL, TOKEN_NOT, TOKEN_DOT, TOKEN_BITLSHIFT, TOKEN_BITRSHIFT, TOKEN_LEQUAL, TOKEN_GEQUAL, TOKEN_LESS, TOKEN_GREATER, TOKEN_AND, TOKEN_OR, TOKEN_BITAND, TOKEN_BITOR, TOKEN_BITXOR, TOKEN_BITNOT, TOKEN_DOUBLECOLON, TOKEN_COLON, TOKEN_ARROW, TOKEN_AT, alpha, alpha_numeric, comment, special, digit, punctuation, word_begin, word, text, token } P = { token = TOKEN_NEWLINE | TOKEN_WORD | TOKEN_STRING | TOKEN_INT | TOKEN_FLOAT | TOKEN_BOOL | TOKEN_LPAREN | TOKEN_RPAREN | TOKEN_LBRACE | TOKEN_RBRACE | TOKEN_LBRACKET | TOKEN_RBRACKET | TOKEN_COMMA | TOKEN_SEMICOLON | TOKEN_ADD | TOKEN_SUB | TOKEN_MUL | TOKEN_DIV | TOKEN_MOD | TOKEN_EQUAL | TOKEN_ASSIGN | TOKEN_NEQUAL | TOKEN_NOT | TOKEN_DOT | TOKEN_BITLSHIFT | TOKEN_BITRSHIFT | TOKEN_LEQUAL | TOKEN_GEQUAL | TOKEN_LESS | TOKEN_GREATER | TOKEN_AND | TOKEN_OR | TOKEN_BITAND | TOKEN_BITOR | TOKEN_BITXOR | TOKEN_BITNOT | TOKEN_DOUBLECOLON | TOKEN_COLON | TOKEN_ARROW | TOKEN_AT . TOKEN_NEWLINE = '\n' |'\r\n' . TOKEN_SPACE = ' ' | '\t' | '\0' | '\n' | '\v' | '\f' | '\r' | comment . special = '@' | '-' | '*' | '/' | '%' | '=' | '!' | '?' | ':' | '.' | ',' | ';' | '<' | '>' | '&' | '|' | '^' | '~' | '$' | '(' | ')' | '[' | ']' | '{' | '}' . comment = '#' text . alpha = [a-z][A-Z] . digit = [0-9] . alpha_numeric = alpha | digit . punctuation = special | '->' | ':=' | '!=' | '<<' | '>>' | '>=' | '&&' | '||' | '::' | '@' . word_begin = ( alpha | '_' ) . word = ( alphanumeric | '_' ) word | ( alphanumeric | '_' ) . text = ( word | space | newline | special ) text . TOKEN_INT = digit | digit TOKEN_INT . TOKEN_FLOAT = TOKEN_INT '.' TOKEN_INT . TOKEN_WORD = word_begin | word_begin word . TOKEN_BOOL = 'true' | 'false' . TOKEN_STRING = '"' text '"' . TOKEN_LPAREN = '(' TOKEN_RPAREN = ')' TOKEN_LBRACE = '{' TOKEN_RBRACE = '}' TOKEN_LBRACKET = '[' TOKEN_RBRACKET = ']' TOKEN_COMMA = ',' TOKEN_SEMICOLON = ';' TOKEN_ADD = '+' TOKEN_SUB = '-' TOKEN_MUL = '*' TOKEN_DIV = '/' TOKEN_MOD = '%' TOKEN_EQUAL = '=' TOKEN_ASSIGN = ':=' TOKEN_NEQUAL = '!=' TOKEN_NOT = '!' TOKEN_DOT = '.' TOKEN_BITLSHIFT = '<<' TOKEN_BITRSHIFT = '>>' TOKEN_LEQUAL = '<=' TOKEN_GEQUAL = '>=' TOKEN_LESS = '<' TOKEN_GREATER = '>' TOKEN_AND = '&&' TOKEN_OR = '||' TOKEN_BITAND = '&' TOKEN_BITOR = '|' TOKEN_BITXOR = '^' TOKEN_BITNOT = '~' TOKEN_DOUBLECOLON = '::' TOKEN_COLON = ':' TOKEN_ARROW = '=' TOKEN_AT = '@' TOKEN_USING = 'using' TOKEN_LET = 'let' TOKEN_MUT = 'mut' TOKEN_FUNC = 'func' TOKEN_IF = 'if' TOKEN_ELSE = 'else' TOKEN_WHILE = 'while' TOKEN_TYPE = 'type' TOKEN_RETURN = 'return' TOKEN_NONE = 'None' }