code_junkie

Lisp grammar in yacc

Nov 14th, 2011
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. ( 1 1)
  2. 23 23 23
  3. ui ui
  4.  
  5. %%
  6. sexpr: atom {printf("matched sexprn");}
  7. | list
  8. ;
  9. list: '(' members ')' {printf("matched listn");}
  10. | '('')' {printf("matched empty listn");}
  11. ;
  12. members: sexpr {printf("members 1n");}
  13. | sexpr members {printf("members 2n");}
  14. ;
  15. atom: ID {printf("IDn");}
  16. | NUM {printf("NUMn");}
  17. | STR {printf("STRn");}
  18. ;
  19. %%
  20.  
  21. program: slist;
  22.  
  23. slist: slist sexpr | sexpr;
  24.  
  25. ( 1 1
  26.  
  27. %{
  28. #include <stdio.h>
  29. #include "a.yacc.tab.h"
  30. int linenumber;
  31. extern int yylval;
  32. %}
  33. %%
  34. n { linenumber++; }
  35. [0-9]+ { yylval = atoi(yytext); return NUM; }
  36. "[^"n]*" { return STR; }
  37. [a-zA-Z][a-zA-Z0-9]* { return ID; }
  38. .
  39. %%
  40.  
  41. (1 1 1)
  42. NUM
  43. matched sexpr
  44. NUM
  45. matched sexpr
  46. NUM
  47. matched sexpr
  48. (1 1
  49. NUM
  50. matched sexpr
  51. NUM
  52. matched sexpr
  53.  
  54. ) { return RPAREN; }
  55. ( { return LPAREN; }
  56.  
  57. program: sexpr*
  58.  
  59. program : /* empty */
  60. | program sexpr
  61. ;
  62.  
  63. program: (sexpr)*;
  64.  
  65. sexpr: list
  66. | atom {Console.WriteLine("matched sexpr");}
  67. ;
  68.  
  69. list:
  70. '('')' {Console.WriteLine("matched empty list");}
  71. | '(' members ')' {Console.WriteLine("matched list");}
  72.  
  73. ;
  74.  
  75. members: (sexpr)+ {Console.WriteLine("members 1");};
  76.  
  77. atom: Id {Console.WriteLine("ID");}
  78. | Num {Console.WriteLine("NUM");}
  79. ;
  80.  
  81.  
  82. Num: ( '0' .. '9')+;
  83. Id: ('a' .. 'z' | 'A' .. 'Z')+;
  84. Whitespace : ( ' ' | 'r' 'n' | 'n' | 't' ) {Skip();};
Add Comment
Please, Sign In to add comment