Compilador da disciplina Logica Computacional Feito por André Tavernaro
Roteiro 9 - ATUAL
PROGRAM = (λ | DECLARATION);
DECLARATION = ("int" | "str" | "void"), IDENTIFIER, "(", { ("int" | "str"), IDENTIFIER, { "," | ("int" | "str"), IDENTIFIER} }, ")", BLOCK;
BLOCK = ("{", STATEMENT, "}" | "{", "}");
STATEMENT = (((λ | ASSIGNMENT | PRINT | VAR_TYPE | RETURN), ";") | (BLOCK | IF | WHILE));
FACTOR = INT | STRING | (IDENTIFIER, { "(", { RELEXPRESSION, { "," | RELEXPRESSION } } ")" }) | (("+" | "-" | "!" FACTOR) | "(", RELEXPRESSION, ")" | SCANF;
TERM = FACTOR, { ("*" | "/" | "&&"), FACTOR };
EXPRESSION = TERM, { ("+" | "-" | "||"), TERM } ;
RELEXPRESSION = EXPRESSION , {("<" | ">" | "==") , EXPRESSION } ;
WHILE = "while", "(", RELEXPRESSION ,")", STATEMENT;
IF = "if", "(", RELEXPRESSION ,")", STATEMENT, (("else", STATEMENT) | λ );
ASSIGNMENT = (IDENTIFIER, "=", RELEXPRESSION) | ( "(", { RELEXPRESSION, { "," | RELEXPRESSION } }, ")" );
RETURN = "return" , "(", RELEXPRESSION, ")";
PRINT = "printf", "(", RELEXPRESSION, ")";
SCANF = "scanf", "(", ")";
IDENTIFIER = LETTER, { LETTER | DIGIT | "_" };
DIGIT = (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9);
INT = DIGIT, { DIGIT };
VAR_TYPE = ("int" | "str") , IDENTIFIER , (λ | {"," , IDENTIFIER });
STRING = """, (LETTER | DIGIT), """;
LETTER = ( a | ... | z | A | ... | Z ) ;
Roteiro 6 - OK
BLOCK = "{" , { STATEMENT }, "}" ;
STATEMENT = ( λ | ASSIGNMENT | PRINT | BLOCK | WHILE | IF), ";" ;
FACTOR = NUMBER | IDENTIFIER | (("+" | "-" | "!") , FACTOR) | "(" , RELEXPRESSION , ")" | SCANF;
TERM = FACTOR, { ("*" | "/" | "&&"), FACTOR } ;
EXPRESSION = TERM, { ("+" | "-" | "||"), TERM } ;
RELEXPRESSION = EXPRESSION , {("<" | ">" | "==") , EXPRESSION } ;
WHILE = "while", "(", RELEXPRESSION ,")", STATEMENT;
IF = "if", "(", RELEXPRESSION ,")", STATEMENT, (("else", STATEMENT) | λ );
ASSIGNMENT = IDENTIFIER, "=" , EXPRESSION ;
PRINT = "printf", "(" , EXPRESSION, ")" ;
SCANF = "scanf", "(", ")" ;
IDENTIFIER = LETTER, { LETTER | DIGIT | "_" } ;
NUMBER = DIGIT , { DIGIT } ;
LETTER = ( a | ... | z | A | ... | Z ) ;
DIGIT = ( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 ) ;
Roteiro 5 - OK
Roteiro 4 - OK
Roteiro 3 - OK
Roteiro 2 -OK
Roteiro 1 - OK