Facebook
From shakil, 6 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 650
  1. %{
  2. #include<stdlib.h>
  3. void yyerror(char *);
  4. #include"y.tab.h"
  5. %}
  6. %%
  7. [0-9]+ {
  8. yylval = atoi(yytext);
  9. return INTEGER;
  10. }
  11. [-+*/\n] return *yytext;
  12. [ \t] ;/*skip whitespace*/
  13. . yyerror("invalid character");
  14. %%
  15. int yywrap(void){
  16. return 1;
  17. }
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. %{
  41. #include<stdio.h>
  42. int yylex(void);
  43. void yyerror(char *);
  44. %}
  45. %left '+' '-'
  46. %left '*' '/'
  47. %token INTEGER
  48. %%
  49. program:
  50. program expr '\n' {printf("%d\n", $2);}
  51. |
  52. ;
  53. expr:
  54. INTEGER {$$ = $1;}
  55. | expr '+' expr {$$ = $1 + $3;}
  56. | expr '-' expr {$$= $1 - $3;}
  57. | expr '*' expr {$$= $1 * $3;}
  58. | expr '/' expr {
  59. if($3==0)
  60. yyerror("divided by zero\n");
  61. else
  62. $$=$1/$3;
  63. }
  64.  
  65. ;
  66. %%
  67.  
  68. void yyerror(char *s){
  69. fprintf(stderr, "%s\n", s);
  70. }
  71. int main(void){
  72. yyparse();
  73. return 0;
  74. }