Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //LEX
- %x MULTILINE_COMMENT
- CHAR [a-zA-Z]
- IDEN [_a-zA-Z][_a-zA-Z0-9]*
- NUM [0-9]+
- %%
- "/*" BEGIN(MULTILINE_COMMENT);
- <MULTILINE_COMMENT> {
- "*/" BEGIN(INITIAL);
- .
- }
- "func" return FUNC;
- "int" retrun INT;
- "string" return STRING;
- "fmt.Println(" return PRINT;
- "retrun" return RETURN;
- {IDEN} return IDENTIFIER;
- "\"{CHAR}+\"" yylval.str = yytext; return LITERAL;
- {NUM} yylval.num = atoi(yytext); return DEC;
- .
- %%
- //BISON
- %union {
- char* str;
- int num;
- }
- %token FUNC IDENTIFIER
- %token INT STRING
- %token PRINT RETURN
- %token DEC LITERAL
- %%
- program: program expr '\n'
- |
- ;
- expr: def_f
- ;
- def_f: header_f body_f
- ;
- header_f: FUNC IDENTIFIER '(' arg_f ')' ret_f
- ;
- arg_f: IDENTIFIER type
- | IDENTIFIER ',' arg_f
- | arg_f ',' arg_f
- |
- ;
- ret_f: type
- | '(' a ')'
- ;
- a : type ',' type
- | type ',' a
- ;
- type: STRING
- | INT
- ;
- body_f: '{' exp '}'
- exp: PRINT LITERAL ')'
- | PRINT IDENTIFIER ')'
- | RETURN b
- b: calc
- | calc ',' b
- ;
- calc: DEC
- | LITERAL
- | calc '+' calc
- | calc '-' calc
- | calc '%' calc
- | calc '*' calc
- | calc '/' calc
- %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement