%{ #include #include #include "test.tab.h" %} %option noyywrap %option yylineno DIGIT [0-9] LETTER [a-zA-Z_] HEX [0-9a-fA-F] OCT [0-7] BIN [0-1] QUOTE ["'] %% {QUOTE}{LETTER}*{QUOTE} {return STRING;} {LETTER}({LETTER}|{DIGIT})* { return IDENT;} {DIGIT}+ { yylval.num = atoi(yytext); return NUMBER; } "break" { return BREAK; } "switch" { return SWITCH; } "case" { return CASE; } "chan" { return CHAN; } "const" { return CONST; } "continue" { return CONTINUE; } "default" { return DEFAULT; } "defer" { return DEFER; } "else" { return ELSE; } "fallthrough" { return FALLTHROUGH; } "for" { return FOR; } "func" { return FUNC; } "go" { return GO; } "goto" { return GOTO; } "if" { return IF; } "import" { return IMPORT; } "interface" { return INTERFACE; } "map" { return MAP; } "package" { return PACKAGE; } "range" { return RANGE; } "return" { return RETURN; } "select" { return SELECT; } "struct" { return STRUCT; } "type" { return TYPE; } "var" { return VAR; } "uint8" { return UINT8; } "uint16" { return UINT16; } "uint32" { return UINT32; } "uint64" { return UINT64; } "int8" { return INT8; } "int16" { return INT16; } "int32" { return INT32; } "int64" { return INT64; } "float32" { return FLOAT32; } "float64" { return FLOAT64; } "complex64" { return COMPLEX64; } "complex128" { return COMPLEX128; } "byte" { return BYTE; } "rune" { return RUNE; } "uint" { return UINT; } "int" { return INT; } "uintptr" { return UINT_PTR; } "string" { return STRING_LIT;} "true" { yylval.bool_val = true; return BOOL_LIT; } "false" { yylval.bool_val = false; return BOOL_LIT; } "nil" { return NIL; } "+" { return PLUS; } "-" { return MINUS; } "*" { return STAR; } "/" { return DIV; } "%" { return MOD; } "&" { return AMPERSAND; } "|" { return PIPE; } "^" { return XOR; } "<<" { return LSHIFT; } ">>" { return RSHIFT; } "&^" { return AND_NOT; } "+=" { return PLUS_EQ; } "-=" { return MINUS_EQ; } "*=" { return MUL_EQ; } "/=" { return DIV_EQ; } "%=" { return MOD_EQ; } "&=" { return AMPERSAND_EQ; } "|=" { return PIPE_EQ; } "^=" { return XOR_EQ; } "<<=" { return LSHIFT_EQ; } ">>=" { return RSHIFT_EQ; } "&^=" { return AND_NOT_EQ; } "++" { return INC; } "--" { return DEC; } "==" { return EQ; } "&&" { return AND; } "||" { return OR; } "!" { return NOT; } "!=" { return NEQ; } "<-" { return ARROW; } "<" { return LT; } ">" { return GT; } "=" { return ASSIGN; } "<=" { return LEQ; } ">=" { return GEQ; } ":=" { return SHORT_ASSIGN; } "..." { return DOTS; } ":" { return COLON; } ";" { return SEMICOLON; } "," { return COMMA; } "." { return DOT; } "(" { return LPAREN; } ")" { return RPAREN; } "[" { return LBRACK; } "]" { return RBRACK; } "{" { return LBRACE; } "}" { return RBRACE; } "//".* { } "/\*"(.|\n)*?"\*/" { } [ \t\n\r]+ { } . { fprintf(stderr, "Unexpected symbol: %s\n", yytext); } %%