Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define DEBUG 0
- int flag=0;
- int aux2 = 0;
- int yylex(void);
- void yyerror(const char *s);
- extern int n_linha;
- extern int n_coluna;
- extern char * yytext;
- extern int yyleng;
- %}
- %union{
- char *str;
- }
- %token <str> ID STRLIT BOOLLIT DECLIT REALLIT
- %token BOOL INT DOUBLE SEMI COMMA PARSEINT OCURV OSQUARE CSQUARE CCURV ASSIGN AND OR EQ GEQ GT LEQ LT NEQ PLUS MINUS STAR DIV MOD NOT DOTLENGTH PUBLIC STATIC STRING VOID CLASS OBRACE CBRACE IF ELSE WHILE DO PRINT RETURN
- %left SEMI COMMA
- %right ASSIGN
- %left OR
- %left AND
- %left EQ NEQ
- %left LT GT LEQ GEQ
- %left MINUS PLUS
- %left STAR DIV MOD
- %nonassoc "negative" "positive"
- %right NOT
- %left OCURV CCURV OBRACE CBRACE OSQUARE CSQUARE
- %right ELSE
- %%
- Program: CLASS ID OBRACE FieldDecl_MethodDecl_SEMI CBRACE {if(DEBUG){printf("Program\n");}}
- ;
- FieldDecl: PUBLIC STATIC Type ID CommaID SEMI {if(DEBUG){printf("FieldDecl\n");}}
- | error SEMI {if(DEBUG){printf("Error SEMI on FielDecl\n");}}
- ;
- MethodDecl: PUBLIC STATIC MethodHeader MethodBody {if(DEBUG){printf("MethodDecl\n");}}
- ;
- MethodHeader: Type ID OCURV FormalParamsOptional CCURV {if(DEBUG){printf("MethodHeader_Type_ID_OCURV_FPO_CCURV\n");}}
- | VOID ID OCURV FormalParamsOptional CCURV {if(DEBUG){printf("MethodHeader_VOID_ID_OCURV_FPO_CCURV\n");}}
- ;
- MethodBody: OBRACE VarDecl_Statement CBRACE {if(DEBUG){printf("MethodBody\n");}}
- ;
- FormalParams: Type ID CommaTypeID {if(DEBUG){printf("FormalParams_Type_ID\n");}}
- | STRING OSQUARE CSQUARE ID {if(DEBUG){printf("FormalParams_STRING_OSQUARE_CSQUARE_ID\n");}}
- ;
- VarDecl: Type ID CommaID SEMI {if(DEBUG){printf("VarDecl\n");}}
- ;
- Type: BOOL {if(DEBUG){printf("BOOL\n");}}
- | INT {if(DEBUG){printf("INT\n");}}
- | DOUBLE {if(DEBUG){printf("DOUBLE\n");}}
- ;
- Statement: OBRACE StatementZeroMore CBRACE {if(DEBUG){printf("OBRACE_StatementZeroMore_CBRACE\n");}}
- | IF OCURV Expr CCURV Statement {if(DEBUG){printf("IF_OCURV_Expr_CCURV_Statement\n");}}
- | IF OCURV Expr CCURV Statement ELSE Statement {if(DEBUG){printf("IF_OCURV_Expr_CCURV_Statement_Else_Statement\n");}}
- | WHILE OCURV Expr CCURV Statement {if(DEBUG){printf("WHILE_OCURV_Expr_CCURV_Statement\n");}}
- | DO Statement WHILE OCURV Expr CCURV SEMI {if(DEBUG){printf("DO_Statement_WHILE_OCURV_Expr_CCURV_SEMI\n");}}
- | PRINT OCURV Expr CCURV SEMI {if(DEBUG){printf("PRINT_OCURV_Expr_CCURV_SEMI\n");}}
- | PRINT OCURV STRLIT CCURV SEMI {if(DEBUG){printf("PRINT_OCURV_STRLIT_CCURV_SEMI\n");}}
- | Expression1_Optional SEMI {if(DEBUG){printf("Expression1_Optional_SEMI\n");}}
- | RETURN ExpressionOptional SEMI {if(DEBUG){printf("RETURN_ExpressionOptional_SEMI\n");}}
- | error SEMI {if(DEBUG){printf("Error SEMI on Statement\n");}}
- ;
- Assignment: ID ASSIGN Expr {if(DEBUG){printf("Assigment\n");}}
- ;
- MethodInvocation: ID OCURV OptionMethodInvocation CCURV {if(DEBUG){printf("MethodInvocation\n");}}
- | ID OCURV error CCURV {if(DEBUG){printf("Error ID OCURV CCURV on MethodInvocation\n");}}
- ;
- ParseArgs: PARSEINT OCURV ID OSQUARE Expr CSQUARE CCURV {if(DEBUG){printf("ParseArgs\n");}}
- | PARSEINT OCURV error CCURV {if(DEBUG){printf("Error PARSEINT OCURV CCURV on ParseArgs\n");}}
- ;
- Expr: Expression1
- | Expr AND Expr {if(DEBUG){printf("Expr_AND_Expr\n");}}
- | Expr OR Expr {if(DEBUG){printf("Expr_OR_Expr\n");}}
- | Expr EQ Expr {if(DEBUG){printf("Expr_EQ_Expr\n");}}
- | Expr GEQ Expr {if(DEBUG){printf("Expr_GEQ_Expr\n");}}
- | Expr GT Expr {if(DEBUG){printf("Expr_GT_Expr\n");}}
- | Expr LEQ Expr {if(DEBUG){printf("Expr_LEQ_Expr\n");}}
- | Expr LT Expr {if(DEBUG){printf("Expr_LT_Expr\n");}}
- | Expr NEQ Expr {if(DEBUG){printf("Expr_NEQ_Expr\n");}}
- | Expr PLUS Expr {if(DEBUG){printf("Expr_PLUS_Expr\n");}}
- | Expr MINUS Expr {if(DEBUG){printf("Expr_MINUS_Expr\n");}}
- | Expr STAR Expr {if(DEBUG){printf("Expr_STAR_Expr\n");}}
- | Expr DIV Expr {if(DEBUG){printf("Expr_DIV_Expr\n");}}
- | Expr MOD Expr {if(DEBUG){printf("Expr_MOD_Expr\n");}}
- | PLUS Expr %prec "positive" {if(DEBUG){printf("PLUS_Expr\n");}}
- | MINUS Expr %prec "negative" {if(DEBUG){printf("MINUS_Expr\n");}}
- | NOT Expr {if(DEBUG){printf("NOT_Expr\n");}}
- | ID Dotlength {if(DEBUG){printf("ID_Dotlength\n");}}
- | OCURV Expr CCURV {if(DEBUG){printf("OCURV_Expr_CCURV\n");}}
- | BOOLLIT {if(DEBUG){printf("BOOLLIT\n");}}
- | DECLIT {if(DEBUG){printf("DECLIT\n");}}
- | REALLIT {if(DEBUG){printf("REALLIT\n");}}
- | OCURV error CCURV {if(DEBUG){printf("Error OCURV CCURV on Expr\n");}}
- ;
- OptionMethodInvocation: Expr CommaExpr {if(DEBUG){printf("OptionMethodInvocation\n");}}
- | Vazio {}
- ;
- CommaExpr: Vazio {}
- | COMMA Expr CommaExpr {if(DEBUG){printf("CommaExpr\n");}}
- ;
- Expression1_Optional: Vazio {}
- | Expression1 {if(DEBUG){printf("Expression1_Optional\n");}}
- ;
- Expression1: Assignment {if(DEBUG){printf("Expression1_Assignment\n");}}
- | MethodInvocation {if(DEBUG){printf("Expression1_MethodInvocation\n");}}
- | ParseArgs {if(DEBUG){printf("Expression1_ParseArgs\n");}}
- ;
- Dotlength: Vazio {}
- | DOTLENGTH {if(DEBUG){printf("DOTLENGTH\n");}}
- ;
- CommaTypeID: Vazio {}
- | COMMA Type ID CommaTypeID {if(DEBUG){printf("CommaTypeID\n");}}
- ;
- FormalParamsOptional: FormalParams {if(DEBUG){printf("FormalParamsOptional_FormalParams\n");}}
- | Vazio
- ;
- StatementZeroMore: Vazio {}
- | Statement StatementZeroMore {if(DEBUG){printf("StatementZeroMore\n");}}
- ;
- ExpressionOptional: Vazio {}
- | Expr {if(DEBUG){printf("ExpressionOptional\n");}}
- ;
- VarDecl_Statement: Vazio {}
- | VarDecl VarDecl_Statement {if(DEBUG){printf("VarDecl_VarDecl_Statement\n");}}
- | Statement VarDecl_Statement {if(DEBUG){printf("Statement_VarDecl_Statement\n");}}
- ;
- FieldDecl_MethodDecl_SEMI: Vazio {}
- | FieldDecl FieldDecl_MethodDecl_SEMI {if(DEBUG){printf("FieldDecl_MethodDecl_SEMI\n");}}
- | MethodDecl FieldDecl_MethodDecl_SEMI {if(DEBUG){printf("FieldDecl_MethodDecl_SEMI\n");}}
- | SEMI FieldDecl_MethodDecl_SEMI {if(DEBUG){printf("FieldDecl_MethodDecl_SEMI\n");}}
- ;
- CommaID: Vazio {}
- | COMMA ID CommaID {if(DEBUG){printf("CommaID\n");}}
- ;
- Vazio: {if(DEBUG){printf("Vazio\n");}}
- ;
- %%
- void yyerror(const char* s){
- printf("Line %d, col %d: %s: %s\n",n_linha,n_coluna-yyleng,s,yytext);
- }
- /* A função main() está do lado do lex */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement