Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include "arvore.h"
- int yyerror(char *s);
- int yylex(void);
- extern int num_linha;
- extern int num_coluna;
- extern char* yytext;
- int flag = 0;
- int errors = 0;
- node *root;
- %}
- %union{
- char* cval;
- struct node *no;
- };
- %token <cval> CHAR
- %token <cval> ELSE
- %token <cval> WHILE
- %token <cval> IF
- %token <cval> INT
- %token <cval> SHORT
- %token <cval> DOUBLE
- %token <cval> RETURN
- %token <cval> VOID
- %token <cval> AND
- %token <cval> ASSIGN
- %token <cval> MUL
- %token <cval> COMMA
- %token <cval> DIV
- %token <cval> EQ
- %token <cval> GE
- %token <cval> GT
- %token <cval> LBRACE
- %token <cval> LE
- %token <cval> LPAR
- %token <cval> LT
- %token <cval> MINUS
- %token <cval> MOD
- %token <cval> NE
- %token <cval> NOT
- %token <cval> OR
- %token <cval> PLUS
- %token <cval> RBRACE
- %token <cval> RPAR
- %token <cval> SEMI
- %token <cval> BITWISEAND
- %token <cval> BITWISEOR
- %token <cval> BITWISEXOR
- %token <cval> ID
- %token <cval> INTLIT
- %token <cval> RESERVED
- %token <cval> REALLIT
- %token <cval> CHRLIT
- %type <no> Inicial;
- %type <no> FunctionsAndDeclarations;
- %type <no> DeclarationsAndStatements;
- %type <no> FunctionDefinition;
- %type <no> FunctionBody;
- %type <no> FunctionDeclaration;
- %type <no> FunctionDeclarator;
- %type <no> ParameterList;
- %type <no> ParameterDeclaration;
- %type <no> Declarator;
- %type <no> Declaration;
- %type <no> TypeSpec;
- %type <no> Statement;
- %type <no> Expr;
- %type <no> CommaParameterList;
- %type <no> CommaDeclaratorList;
- %type <no> CommaExprList;
- %left COMMA
- %right ASSIGN
- %left OR
- %left AND
- %left BITWISEAND BITWISEOR BITWISEXOR
- %left EQ NE
- %left GE GT LE LT
- %left PLUS MINUS
- %left MUL DIV MOD
- %right NOT
- %right PRECEDENCIA
- %left LBRACE LPAR RPAR RBRACE
- %nonassoc IF
- %nonassoc ELSE
- %%
- Inicial:
- FunctionsAndDeclarations
- ;
- FunctionsAndDeclarations: FunctionDefinition
- |FunctionDeclaration
- |Declaration
- |FunctionsAndDeclarations FunctionDefinition
- |FunctionsAndDeclarations FunctionDeclaration {printf("ola");}
- |FunctionsAndDeclarations Declaration {printf("ola");}
- | error SEMI {printf("ola");}
- | FunctionDeclaration error SEMI {printf("ola");}
- ;
- FunctionDefinition: TypeSpec FunctionDeclarator FunctionBody {;}
- ;
- FunctionBody: LBRACE DeclarationsAndStatements RBRACE {;}
- | LBRACE RBRACE {;}
- ;
- DeclarationsAndStatements: DeclarationsAndStatements Statement {;}
- | DeclarationsAndStatements Declaration {;}
- | Statement {;}
- | Declaration {;}
- ;
- FunctionDeclaration: TypeSpec FunctionDeclarator SEMI {;}
- ;
- FunctionDeclarator: ID LPAR ParameterList RPAR {;}
- ;
- ParameterList: ParameterDeclaration {;}
- | ParameterDeclaration CommaParameterList {;}
- ;
- CommaParameterList: COMMA ParameterDeclaration {;}
- | COMMA ParameterDeclaration CommaParameterList {;}
- ;
- ParameterDeclaration: TypeSpec {;}
- |TypeSpec ID {;}
- ;
- Declaration: TypeSpec Declarator CommaDeclaratorList SEMI {;}
- | TypeSpec Declarator SEMI {;}
- ;
- CommaDeclaratorList: COMMA Declarator {;}
- | COMMA Declarator CommaDeclaratorList {;}
- ;
- TypeSpec: CHAR {;}
- | INT {;}
- | VOID {;}
- | SHORT {;}
- | DOUBLE {;}
- ;
- Declarator: ID ASSIGN Expr {;}
- | ID {;}
- ;
- Statement: Expr SEMI {;}
- | SEMI {;}
- | LBRACE Statement RBRACE {;}
- | LBRACE RBRACE {;}
- | IF LPAR Expr RPAR Statement ELSE Statement {;}
- | IF LPAR Expr RPAR Statement %prec IF {;}
- | WHILE LPAR Expr RPAR Statement {;}
- | RETURN Expr SEMI {;}
- | RETURN SEMI {;}
- | error SEMI {;}
- ;
- Expr: Expr ASSIGN Expr {;}
- | Expr PLUS Expr {;}
- | Expr MINUS Expr {;}
- | Expr MUL Expr {;}
- | Expr DIV Expr {;}
- | Expr MOD Expr {;}
- | Expr OR Expr {;}
- | Expr AND Expr {;}
- | Expr BITWISEAND Expr {;}
- | Expr BITWISEOR Expr {;}
- | Expr BITWISEXOR Expr {;}
- | Expr EQ Expr {;}
- | Expr NE Expr {;}
- | Expr LE Expr {;}
- | Expr GE Expr {;}
- | Expr LT Expr {;}
- | Expr GT Expr {;}
- | PLUS Expr %prec PRECEDENCIA{;}
- | MINUS Expr %prec PRECEDENCIA{;}
- | NOT Expr %prec PRECEDENCIA{;}
- | ID LPAR CommaExprList RPAR {;}
- | ID LPAR RPAR {;}
- | ID {;}
- | INTLIT {;}
- | CHRLIT {;}
- | REALLIT {;}
- | LPAR Expr RPAR {;}
- | ID LPAR error RPAR {;}
- | LPAR error RPAR {;}
- ;
- CommaExprList:Expr {;}
- | CommaExprList COMMA Expr {;}
- ;
- %%
- int main(int argc, char*argv[])
- {
- if(argc == 2){
- if(argv[1] != NULL && strcmp(argv[1],"-l") == 0){
- flag = 1;
- yylex();
- }
- else if(argv[1] != NULL && strcmp(argv[1],"-t") == 0){
- flag = -1;
- yyparse();
- if(errors == 0){
- print_tree(root, 0);
- }
- destroy(root);
- }
- }
- else{
- flag=-1;
- yyparse();
- }
- return 0;
- }
- int yyerror(char *s){
- printf("Line %d, col %d: %s: %s\n", num_linha, (int)(num_coluna - strlen(yytext)), s, yytext);
- printf("ola");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement