Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. //LEX
  2. %x MULTILINE_COMMENT
  3.  
  4. CHAR        [a-zA-Z]
  5. IDEN        [_a-zA-Z][_a-zA-Z0-9]*
  6. NUM         [0-9]+
  7.  
  8. %%
  9.  
  10. "/*" BEGIN(MULTILINE_COMMENT);
  11.  
  12. <MULTILINE_COMMENT> {
  13.     "*/" BEGIN(INITIAL);
  14.     .
  15. }
  16.  
  17. "func"      return FUNC;
  18. "int"       retrun INT;
  19. "string"    return STRING;
  20. "fmt.Println(" return PRINT;
  21. "retrun"    return RETURN;
  22. {IDEN}      return IDENTIFIER;
  23. "\"{CHAR}+\""       yylval.str = yytext; return LITERAL;
  24. {NUM}       yylval.num = atoi(yytext); return DEC;
  25. .
  26. %%
  27.  
  28. //BISON
  29. %union {
  30.     char* str;
  31.     int num;
  32. }
  33.  
  34. %token FUNC IDENTIFIER
  35. %token INT STRING
  36. %token PRINT RETURN
  37. %token DEC LITERAL
  38.  
  39. %%
  40. program: program expr '\n'
  41.     |
  42.     ;
  43. expr: def_f
  44.     ;
  45.  
  46. def_f: header_f body_f
  47.     ;
  48.  
  49. header_f: FUNC IDENTIFIER '(' arg_f ')' ret_f
  50.     ;
  51.  
  52. arg_f: IDENTIFIER type
  53.     | IDENTIFIER ',' arg_f
  54.     | arg_f ',' arg_f
  55.     |
  56.     ;
  57.  
  58. ret_f: type
  59.     | '(' a ')'
  60.     ;
  61.  
  62. a : type ',' type
  63.     | type ',' a
  64.     ;
  65.  
  66. type: STRING
  67.     | INT
  68.     ;
  69.  
  70. body_f: '{' exp '}'
  71.  
  72. exp: PRINT LITERAL ')'
  73.     | PRINT IDENTIFIER ')'
  74.     | RETURN b
  75.  
  76. b: calc
  77.     | calc ',' b
  78.     ;
  79.  
  80. calc: DEC
  81.     | LITERAL
  82.     | calc '+' calc
  83.     | calc '-' calc
  84.     | calc '%' calc
  85.     | calc '*' calc
  86.     | calc '/' calc
  87.  
  88. %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement