- Para compilar, no terminal, entre com os seguintes comandos:
cd compilador
Scripts\activate
py index.py algoritmo2.txt
- Após o processo de compilação, para executar o código objeto, no terminal, entre com os seguintes comandos:
py codigoObjeto.py
Grammar:
Rule 0 S' -> initial
Rule 1 initial -> ALGORITMO CARACTERE ; varAux INICIO ; blocoType FIMALGORITMO ;
Rule 2 varAux -> VAR ; declaracaoType
Rule 3 varAux -> <empty>
Rule 4 blocoType -> <empty>
Rule 5 blocoType -> bloco
Rule 6 declaracaoType -> <empty>
Rule 7 declaracaoType -> declaracaoTypeAux
Rule 8 declaracaoTypeAux -> declaracao ;
Rule 9 declaracaoTypeAux -> declaracao ; declaracaoTypeAux
Rule 10 declaracao -> vartype : LOGICO
Rule 11 declaracao -> vartype : CARACTERE
Rule 12 declaracao -> vartype : REAL
Rule 13 declaracao -> vartype : INTEIRO
Rule 14 vartype -> ID , vartype
Rule 15 vartype -> ID
Rule 16 bloco -> cmd ; bloco
Rule 17 bloco -> cmd ;
Rule 18 cmd -> cmdRepeticao
Rule 19 cmd -> LIMPATELA
Rule 20 cmd -> cmdCondicao
Rule 21 cmd -> cmdleitura
Rule 22 cmd -> cmdescrita
Rule 23 cmd -> cmdattrib
Rule 24 cmdRepeticao -> ENQUANTO regraVazia expressaoRelacional FACA regraVazia blocoType FIMENQUANTO
Rule 25 cmdleitura -> LEIA ( idAux )
Rule 26 idAux -> ID , idAux
Rule 27 idAux -> ID
Rule 28 regraVazia -> ;
Rule 29 cmdCondicao -> SE expressaoRelacional regraVazia ENTAO ; blocoType SENAO regraVazia blocoType FIMSE
Rule 30 cmdCondicao -> SE expressaoRelacional regraVazia ENTAO ; blocoType FIMSE
Rule 31 expressaoRelacional -> termoRelacional
Rule 32 expressaoRelacional -> expressaoRelacional OP_BOOL termoRelacional
Rule 33 termoRelacional -> ID
Rule 34 termoRelacional -> ( expressaoRelacional )
Rule 35 termoRelacional -> FALSO
Rule 36 termoRelacional -> VERDADEIRO
Rule 37 termoRelacional -> ( termoRelacional )
Rule 38 termoRelacional -> NAO termoRelacional
Rule 39 termoRelacional -> exprC OP_REL exprC
Rule 40 termoRelacional -> expr OP_REL expr
Rule 41 OP_BOOL -> OU [precedence=nonassoc, level=1]
Rule 42 OP_BOOL -> E [precedence=nonassoc, level=1]
Rule 43 OP_REL -> EQ [precedence=nonassoc, level=1]
Rule 44 OP_REL -> GT [precedence=nonassoc, level=1]
Rule 45 OP_REL -> GE [precedence=nonassoc, level=1]
Rule 46 OP_REL -> LT [precedence=nonassoc, level=1]
Rule 47 OP_REL -> LE [precedence=nonassoc, level=1]
Rule 48 OP_REL -> NE [precedence=nonassoc, level=1]
Rule 49 cmdattrib -> ID ASSIGN expressaoRelacional
Rule 50 cmdattrib -> ID ASSIGN expr
Rule 51 cmdattrib -> ID ASSIGN exprC
Rule 52 cmdescrita -> ESCREVAL ( )
Rule 53 cmdescrita -> ESCREVAL ( typeArgsEscrita )
Rule 54 cmdescrita -> ESCREVA ( )
Rule 55 cmdescrita -> ESCREVA ( typeArgsEscrita )
Rule 56 typeArgsEscritaAux -> expressaoRelacional
Rule 57 typeArgsEscritaAux -> expr
Rule 58 typeArgsEscritaAux -> exprC
Rule 59 typeArgsEscrita -> typeArgsEscritaAux
Rule 60 typeArgsEscrita -> typeArgsEscrita , typeArgsEscritaAux
Rule 61 expr -> ID
Rule 62 expr -> REAL
Rule 63 expr -> INTEIRO
Rule 64 expr -> - expr [precedence=right, level=5]
Rule 65 expr -> + expr [precedence=right, level=5]
Rule 66 expr -> expr ^ expr [precedence=right, level=4]
Rule 67 expr -> expr MOD expr [precedence=left, level=3]
Rule 68 expr -> expr % expr [precedence=left, level=3]
Rule 69 expr -> expr \ expr [precedence=left, level=3]
Rule 70 expr -> expr / expr [precedence=left, level=3]
Rule 71 expr -> expr * expr [precedence=left, level=3]
Rule 72 expr -> expr - expr [precedence=left, level=2]
Rule 73 expr -> expr + expr [precedence=left, level=2]
Rule 74 expr -> ( expr )
Rule 75 exprC -> CARACTERE
Rule 76 exprC -> ID
Rule 77 exprC -> exprC + exprC [precedence=left, level=2]
Rule 78 exprC -> ( exprC )
Obs: Todas regras sintáticas e o passo a passo das operações de shift e reduce podem ser encontradas no arquivo: parser.out
./compilador/parser.out
Obs2: O arquivo tokens.txt guarda todos tokens apĂłs a leitura do programa em Visualg.
./compilador/tokens.txt
Obs3: O arquivo algoritmo.txt é o programa de entrada, em Visualg, que será verificado as regras léxicas(Lexer) e sintáticas(Parser).
./compilador/algoritmo.txt
Obs4: Após o compilador ser executado o arquivo com o nome codigoObjeto.py será gerado, esse arquivo é o código objeto resultante do processo de compilação.
./compilador/codigoObjeto.py