134 lines
3.7 KiB
Plaintext
134 lines
3.7 KiB
Plaintext
%{
|
|
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
#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); }
|
|
%%
|
|
|