Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include "y.tab.h"
- #include <stdlib.h>
- %}
- %%
- [0-9]+ {yylval = atoi(yytext); return INTEGER;}
- [+] return PLUS;
- [n] return NL;
- [ t] ; /* skip whitespace */
- . {printf("Unknown character '%c'n", yytext[0]); return 0;}
- %%
- int yywrap(void) {
- return 1;
- }
- %{
- #include <stdio.h>
- int yylex(void);
- void yyerror(char *);
- %}
- %token INTEGER PLUS NL
- %left PLUS MINUS
- %%
- prog: prog expr NL { printf("%dn", $2); }
- |
- ;
- expr: INTEGER { $$ = $1; }
- | expr PLUS expr { $$ = $1 + $3; }
- ;
- %%
- void yyerror(char *s) {
- fprintf(stderr, "%sn", s);
- }
- int main(void) {
- yyparse();
- return 0;
- }
- bison -y -d badd.y
- flex badd.l
- gcc y.tab.c lex.yy.c -o badd.exe
- %{
- #include "ladd.h"
- #include <stdlib.h>
- extern int yylval;
- %}
- %%
- [0-9]+ {yylval = atoi(yytext); return INTEGER;}
- [+] return PLUS;
- [n] return NL;
- [ t] ; /* skip whitespace */
- . {printf("Unknown character '%c'n", yytext[0]); return 0;}
- %%
- int yywrap(void) {
- return 1;
- }
- %include { #include <assert.h> }
- %syntax_error { printf("Lemon syntax errorn"); }
- %token_type {int}
- %left PLUS MINUS .
- start ::= prog .
- prog ::= prog expr(a) NL . { printf("%dn", a); }
- prog ::= .
- expr(a) ::= INTEGER(b) . { a = b; }
- expr(a) ::= expr(b) PLUS expr(c) . { a = b + c; }
- lemon ladd.y
- flex ladd.l
- gcc main.c ladd.c lex.yy.c -o ladd.exe
- start ::= prog .
- prog ::= prog print NL .
- prog ::= .
- print ::= expr(a) . { printf("%dn", a); }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement