From 49103fbd9e8e7664ffe385c84932f12a13ef2dd5 Mon Sep 17 00:00:00 2001 From: Adsu Date: Sat, 14 Nov 2020 17:36:05 -0300 Subject: [PATCH] :bug: corrigindo Parser ignora tokens indesejados (fix #834 fix #759 fix #867 fix #810 fix #759 fix #190) (#871) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Capturando tokens que não deveriam estar no codigo. * corrigindo problemas do senao * capturando erros em parametros de funcao * Update BuscadorDeSimbolo.java, AnalisadorDeclaracaoTamanhoVetorMatriz.java, and 9 more files... * capturando erros de retorno de vetores e matrizes * corrigindo null em parametros de funcao * corrigindo texto do erro de cadeia --- core/src/main/antlr/Portugol.g4 | 12 +- core/src/main/antlr/PortugolLexico.g4 | 2 +- .../portugol/nucleo/BuscadorDeSimbolo.java | 10 + ...nalisadorDeclaracaoTamanhoVetorMatriz.java | 12 + .../semantica/AnalisadorRetornoDeFuncao.java | 12 + .../semantica/AnalisadorSemantico.java | 12 + .../avisos/AvisoSimboloGlobalOcultado.java | 6 + .../sintatica/AnalisadorSintatico.java | 33 +- .../nucleo/analise/sintatica/GeradorASA.java | 46 +- .../sintatica/antlr4/PortugolBaseVisitor.java | 14 + .../sintatica/antlr4/PortugolParser.java | 1221 +++++++++-------- .../sintatica/antlr4/PortugolVisitor.java | 12 + .../erros/ErroLinhaPuladaEmString.java | 2 +- .../erros/ErroParametrosNaoTipados.java | 28 + .../erros/ErroParsingNaoTratado.java | 2 +- .../erros/ErroRetornoVetorMatriz.java | 27 + .../sintatica/erros/ErroSenaoInesperado.java | 34 + .../TradutorMismatchedTokenException.java | 52 +- .../nucleo/asa/NoParametroFuncao.java | 35 + .../univali/portugol/nucleo/asa/NoSenao.java | 108 ++ .../portugol/nucleo/asa/VisitanteASA.java | 7 +- .../nucleo/asa/VisitanteASABasico.java | 11 + .../nucleo/execucao/DetectaNosParada.java | 10 + ide/build.gradle | 4 +- .../br/univali/ps/nucleo/PSAnalytics.java | 29 +- .../rstautil/tree/AstOutlineTreeFactory.java | 12 + .../ui/rstautil/tree/AstTreeCellRenderer.java | 20 + .../tree/filters/SymbolTypeFilter.java | 12 + 28 files changed, 1159 insertions(+), 626 deletions(-) create mode 100644 core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParametrosNaoTipados.java create mode 100644 core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroRetornoVetorMatriz.java create mode 100644 core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroSenaoInesperado.java create mode 100644 core/src/main/java/br/univali/portugol/nucleo/asa/NoParametroFuncao.java create mode 100644 core/src/main/java/br/univali/portugol/nucleo/asa/NoSenao.java diff --git a/core/src/main/antlr/Portugol.g4 b/core/src/main/antlr/Portugol.g4 index 6caef5367..1dc458a57 100644 --- a/core/src/main/antlr/Portugol.g4 +++ b/core/src/main/antlr/Portugol.g4 @@ -41,9 +41,10 @@ tamanhoArray : expressao; // aceita inteiro ou variável como tamanho do array, o semântico verifica se a variável é constante declaracaoFuncao - : FUNCAO TIPO? ID ABRE_PARENTESES listaParametros? FECHA_PARENTESES - ABRE_CHAVES comando* FECHA_CHAVES ; + : FUNCAO TIPO? ID parametroFuncao ABRE_CHAVES comando* FECHA_CHAVES ; +parametroFuncao + : ABRE_PARENTESES listaParametros? FECHA_PARENTESES ; listaParametros : parametro (VIRGULA parametro)* ; @@ -58,7 +59,7 @@ parametroMatriz comando : listaDeclaracoes - | se + | se | enquanto | facaEnquanto | para @@ -84,7 +85,10 @@ retorne : RETORNE expressao? ; se - : SE ABRE_PARENTESES expressao FECHA_PARENTESES listaComandos (SENAO listaComandos)? ; + : SE ABRE_PARENTESES expressao FECHA_PARENTESES listaComandos (senao)? ; + +senao + : SENAO listaComandos ; enquanto : ENQUANTO ABRE_PARENTESES expressao FECHA_PARENTESES listaComandos ; diff --git a/core/src/main/antlr/PortugolLexico.g4 b/core/src/main/antlr/PortugolLexico.g4 index 2e6937d82..ebb05c22e 100644 --- a/core/src/main/antlr/PortugolLexico.g4 +++ b/core/src/main/antlr/PortugolLexico.g4 @@ -111,4 +111,4 @@ VIRGULA : ','; PONTOVIRGULA : ';'; -DOISPONTOS : ':'; +DOISPONTOS : ':'; \ No newline at end of file diff --git a/core/src/main/java/br/univali/portugol/nucleo/BuscadorDeSimbolo.java b/core/src/main/java/br/univali/portugol/nucleo/BuscadorDeSimbolo.java index 9e643a2cf..92e9bd26d 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/BuscadorDeSimbolo.java +++ b/core/src/main/java/br/univali/portugol/nucleo/BuscadorDeSimbolo.java @@ -677,4 +677,14 @@ public Object visitar(NoTitulo noTitulo) throws ExcecaoVisitaASA { public Object visitar(NoVaPara noVaPara) throws ExcecaoVisitaASA { return null; } + + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + return null; + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + return null; + } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorDeclaracaoTamanhoVetorMatriz.java b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorDeclaracaoTamanhoVetorMatriz.java index 493c58042..d0f77ed15 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorDeclaracaoTamanhoVetorMatriz.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorDeclaracaoTamanhoVetorMatriz.java @@ -51,6 +51,7 @@ import br.univali.portugol.nucleo.asa.NoOperacaoSoma; import br.univali.portugol.nucleo.asa.NoOperacaoSubtracao; import br.univali.portugol.nucleo.asa.NoPara; +import br.univali.portugol.nucleo.asa.NoParametroFuncao; import br.univali.portugol.nucleo.asa.NoPare; import br.univali.portugol.nucleo.asa.NoReal; import br.univali.portugol.nucleo.asa.NoReferenciaMatriz; @@ -58,6 +59,7 @@ import br.univali.portugol.nucleo.asa.NoReferenciaVetor; import br.univali.portugol.nucleo.asa.NoRetorne; import br.univali.portugol.nucleo.asa.NoSe; +import br.univali.portugol.nucleo.asa.NoSenao; import br.univali.portugol.nucleo.asa.NoTitulo; import br.univali.portugol.nucleo.asa.NoVaPara; import br.univali.portugol.nucleo.asa.NoVetor; @@ -406,4 +408,14 @@ public Object visitar(NoDeclaracaoParametro noDeclaracaoParametro) throws Exceca public Object visitar(NoInclusaoBiblioteca noInclusaoBiblioteca) throws ExcecaoVisitaASA { throw new ExcecaoVisitaASA("Not supported yet.", null, null); //To change body of generated methods, choose Tools | Templates. } + + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + throw new ExcecaoVisitaASA("Not supported yet.", null, null); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + throw new ExcecaoVisitaASA("Not supported yet.", null, null); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorRetornoDeFuncao.java b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorRetornoDeFuncao.java index 665e6b2fd..fc276a675 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorRetornoDeFuncao.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorRetornoDeFuncao.java @@ -43,6 +43,7 @@ import br.univali.portugol.nucleo.asa.NoOperacaoSoma; import br.univali.portugol.nucleo.asa.NoOperacaoSubtracao; import br.univali.portugol.nucleo.asa.NoPara; +import br.univali.portugol.nucleo.asa.NoParametroFuncao; import br.univali.portugol.nucleo.asa.NoPare; import br.univali.portugol.nucleo.asa.NoReal; import br.univali.portugol.nucleo.asa.NoReferenciaMatriz; @@ -50,6 +51,7 @@ import br.univali.portugol.nucleo.asa.NoReferenciaVetor; import br.univali.portugol.nucleo.asa.NoRetorne; import br.univali.portugol.nucleo.asa.NoSe; +import br.univali.portugol.nucleo.asa.NoSenao; import br.univali.portugol.nucleo.asa.NoTitulo; import br.univali.portugol.nucleo.asa.NoVaPara; import br.univali.portugol.nucleo.asa.NoVetor; @@ -436,4 +438,14 @@ public Object visitar(NoInclusaoBiblioteca noInclusaoBiblioteca) throws ExcecaoV return false; } + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + return false; + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + return false; + } + } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorSemantico.java b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorSemantico.java index ff482e653..47ad4dd5d 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorSemantico.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/AnalisadorSemantico.java @@ -2600,4 +2600,16 @@ public Object visitar(NoVaPara noVaPara) throws ExcecaoVisitaASA setarPaiDoNo(noVaPara); throw new ExcecaoVisitaASA("Erro", new ErroComandoNaoSuportado(noVaPara.getTrechoCodigoFonte()), asa, noVaPara); } + + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + setarPaiDoNo(noSenao); + throw new ExcecaoVisitaASA("Erro", new ErroComandoNaoSuportado(noSenao.getTrechoCodigoFonte()), asa, noSenao); + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + setarPaiDoNo(noParametroFuncao); + throw new ExcecaoVisitaASA("Erro", new ErroComandoNaoSuportado(noParametroFuncao.getTrechoCodigoFonte()), asa, noParametroFuncao); + } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/avisos/AvisoSimboloGlobalOcultado.java b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/avisos/AvisoSimboloGlobalOcultado.java index 16297b580..fbcbe66c9 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/avisos/AvisoSimboloGlobalOcultado.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/semantica/avisos/AvisoSimboloGlobalOcultado.java @@ -7,6 +7,7 @@ import br.univali.portugol.nucleo.asa.NoDeclaracaoParametro; import br.univali.portugol.nucleo.asa.NoDeclaracaoVariavel; import br.univali.portugol.nucleo.asa.NoDeclaracaoVetor; +import br.univali.portugol.nucleo.asa.NoParametroFuncao; import br.univali.portugol.nucleo.asa.VisitanteASABasico; import br.univali.portugol.nucleo.mensagens.AvisoAnalise; import br.univali.portugol.nucleo.simbolos.Funcao; @@ -150,5 +151,10 @@ public Object visitar(NoDeclaracaoFuncao declaracaoFuncao) throws ExcecaoVisitaA { return super.visitar(declaracaoFuncao); //To change body of generated methods, choose Tools | Templates. } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/AnalisadorSintatico.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/AnalisadorSintatico.java index df497c7ef..0ce05d7eb 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/AnalisadorSintatico.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/AnalisadorSintatico.java @@ -12,11 +12,15 @@ import br.univali.portugol.nucleo.mensagens.ErroSintatico; import java.util.ArrayList; import java.util.Arrays; +import java.util.BitSet; import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.antlr.runtime.UnwantedTokenException; import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.ATNConfigSet; +import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.misc.IntervalSet; import org.antlr.v4.runtime.misc.ParseCancellationException; @@ -121,7 +125,6 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, int notificarErroSintatico(traduzirErroParsing(e, msg, line, charPositionInLine)); } } - }); PortugolParser portugolParser = new PortugolParser(new CommonTokenStream(portugolLexer)); @@ -150,6 +153,32 @@ public void reportMissingToken(Parser recognizer) { String msg = "missing " + expecting.toString(recognizer.getVocabulary()) + " at " + getTokenErrorDisplay(t); throw new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext()); } + + @Override + protected void reportUnwantedToken(Parser recognizer) { + beginErrorCondition(recognizer); + Token t = recognizer.getCurrentToken(); + String msg = "O token " +getTokenErrorDisplay(t)+ " não faz sentido neste local. Remove-lo pode solucionar o problema"; + throw new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext()); + } + + @Override + protected void reportFailedPredicate(Parser recognizer, FailedPredicateException e) { + beginErrorCondition(recognizer); + Token t = recognizer.getCurrentToken(); + IntervalSet expecting = getExpectedTokens(recognizer); + String msg = "Expressão " +getTokenErrorDisplay(t)+ " não faz sentido, era esperado o token "+expecting.toString(recognizer.getVocabulary())+"."; + throw new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext()); + } + + @Override + protected void reportNoViableAlternative(Parser recognizer, NoViableAltException e) { + beginErrorCondition(recognizer); + Token t = recognizer.getCurrentToken(); + IntervalSet expecting = getExpectedTokens(recognizer); + String msg = "Expressão " +getTokenErrorDisplay(t)+ " não faz sentido, era esperado o token "+expecting.toString(recognizer.getVocabulary())+"."; + throw new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext()); + } }); try { @@ -161,7 +190,7 @@ public void reportMissingToken(Parser recognizer) { return asa; } catch (RecognitionException excecao) { - tratarErroParsing(excecao, codigoFonte); + tratarErroParsing(excecao, excecao.getLocalizedMessage()); } catch(ParseCancellationException e) { System.out.println(e); diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/GeradorASA.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/GeradorASA.java index 5c5a98fa4..c7a53b610 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/GeradorASA.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/GeradorASA.java @@ -175,13 +175,10 @@ public No visitDeclaracaoFuncao(PortugolParser.DeclaracaoFuncaoContext ctx) { TipoDado tipoRetorno = TipoDado.obterTipoDadoPeloNome(nomeTipoRetorno); NoDeclaracaoFuncao declaracaoFuncao = new NoDeclaracaoFuncao(nomeFuncao, tipoRetorno, Quantificador.VALOR); - - if (ctx.listaParametros() != null) { // se a função tem parâmetros - List parametros = new ArrayList<>(); - for (ParametroContext parametroContext : ctx.listaParametros().parametro()) { - parametros.add((NoDeclaracaoParametro)parametroContext.accept(this)); - } - declaracaoFuncao.setParametros(parametros); + + if (ctx.parametroFuncao() != null) { // se a função tem parâmetros + NoParametroFuncao noParametroFuncao = (NoParametroFuncao) visit(ctx.parametroFuncao()); + declaracaoFuncao.setParametros(noParametroFuncao.getParametros()); } declaracaoFuncao.setBlocos(getBlocos(ctx.comando())); @@ -196,6 +193,16 @@ public No visitDeclaracaoFuncao(PortugolParser.DeclaracaoFuncaoContext ctx) { return declaracaoFuncao; } + @Override + public No visitParametroFuncao(ParametroFuncaoContext ctx) { + NoParametroFuncao noParametroFuncao = new NoParametroFuncao(); + if(ctx.listaParametros()!=null) + for (ParametroContext parametroContext : ctx.listaParametros().parametro()) { + noParametroFuncao.addParametro((NoDeclaracaoParametro)parametroContext.accept(this)); + } + return noParametroFuncao; + } + @Override public No visitRetorne(RetorneContext ctx) { TrechoCodigoFonte trechoCodigoFonte = getTrechoCodigoFonte(ctx.RETORNE()); @@ -669,18 +676,23 @@ public No visitEnquanto(EnquantoContext ctx) { @Override public No visitSe(SeContext ctx) { - NoSe se = new NoSe((NoExpressao)ctx.expressao().accept(this)); - - se.setBlocosVerdadeiros(getBlocos(ctx.listaComandos(0))); - - if (ctx.SENAO() != null) { - se.setBlocosFalsos(getBlocos(ctx.listaComandos(1))); - } - - se.setTrechoCodigoFonte(getTrechoCodigoFonte(ctx.SE(), ctx.getText().length())); - + NoSe se = new NoSe((NoExpressao)ctx.expressao().accept(this)); + se.setBlocosVerdadeiros(getBlocos(ctx.listaComandos())); + if(ctx.senao() != null) + { + NoSenao senao = (NoSenao) visit(ctx.senao()); + se.setBlocosFalsos(senao.getBlocosFalsos()); + } + se.setTrechoCodigoFonte(getTrechoCodigoFonte(ctx.SE(), ctx.getText().length())); return se; } + + @Override + public No visitSenao(SenaoContext ctx) { + NoSenao senao = new NoSenao(); + senao.setBlocosFalsos(getBlocos(ctx.listaComandos())); + return senao; + } @Override public No visitChamadaFuncao(PortugolParser.ChamadaFuncaoContext ctx) { diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolBaseVisitor.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolBaseVisitor.java index 064d79196..21c2df9b2 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolBaseVisitor.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolBaseVisitor.java @@ -102,6 +102,13 @@ public class PortugolBaseVisitor extends AbstractParseTreeVisitor implemen * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitDeclaracaoFuncao(PortugolParser.DeclaracaoFuncaoContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitParametroFuncao(PortugolParser.ParametroFuncaoContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -186,6 +193,13 @@ public class PortugolBaseVisitor extends AbstractParseTreeVisitor implemen * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitSe(PortugolParser.SeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSenao(PortugolParser.SenaoContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolParser.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolParser.java index 9f85bdf2a..9ae04ef7d 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolParser.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolParser.java @@ -35,24 +35,24 @@ public class PortugolParser extends Parser { RULE_declaracao = 3, RULE_declaracaoVariavel = 4, RULE_declaracaoMatriz = 5, RULE_inicializacaoMatriz = 6, RULE_linhaMatriz = 7, RULE_colunaMatriz = 8, RULE_declaracaoArray = 9, RULE_inicializacaoArray = 10, RULE_tamanhoArray = 11, - RULE_declaracaoFuncao = 12, RULE_listaParametros = 13, RULE_parametro = 14, - RULE_parametroArray = 15, RULE_parametroMatriz = 16, RULE_comando = 17, - RULE_atribuicao = 18, RULE_atribuicaoComposta = 19, RULE_retorne = 20, - RULE_se = 21, RULE_enquanto = 22, RULE_facaEnquanto = 23, RULE_para = 24, - RULE_listaComandos = 25, RULE_inicializacaoPara = 26, RULE_condicao = 27, - RULE_incrementoPara = 28, RULE_escolha = 29, RULE_caso = 30, RULE_pare = 31, - RULE_indiceArray = 32, RULE_expressao = 33, RULE_listaExpressoes = 34, - RULE_escopoBiblioteca = 35; + RULE_declaracaoFuncao = 12, RULE_parametroFuncao = 13, RULE_listaParametros = 14, + RULE_parametro = 15, RULE_parametroArray = 16, RULE_parametroMatriz = 17, + RULE_comando = 18, RULE_atribuicao = 19, RULE_atribuicaoComposta = 20, + RULE_retorne = 21, RULE_se = 22, RULE_senao = 23, RULE_enquanto = 24, + RULE_facaEnquanto = 25, RULE_para = 26, RULE_listaComandos = 27, RULE_inicializacaoPara = 28, + RULE_condicao = 29, RULE_incrementoPara = 30, RULE_escolha = 31, RULE_caso = 32, + RULE_pare = 33, RULE_indiceArray = 34, RULE_expressao = 35, RULE_listaExpressoes = 36, + RULE_escopoBiblioteca = 37; private static String[] makeRuleNames() { return new String[] { "arquivo", "inclusaoBiblioteca", "listaDeclaracoes", "declaracao", "declaracaoVariavel", "declaracaoMatriz", "inicializacaoMatriz", "linhaMatriz", "colunaMatriz", "declaracaoArray", "inicializacaoArray", "tamanhoArray", "declaracaoFuncao", - "listaParametros", "parametro", "parametroArray", "parametroMatriz", - "comando", "atribuicao", "atribuicaoComposta", "retorne", "se", "enquanto", - "facaEnquanto", "para", "listaComandos", "inicializacaoPara", "condicao", - "incrementoPara", "escolha", "caso", "pare", "indiceArray", "expressao", - "listaExpressoes", "escopoBiblioteca" + "parametroFuncao", "listaParametros", "parametro", "parametroArray", + "parametroMatriz", "comando", "atribuicao", "atribuicaoComposta", "retorne", + "se", "senao", "enquanto", "facaEnquanto", "para", "listaComandos", "inicializacaoPara", + "condicao", "incrementoPara", "escolha", "caso", "pare", "indiceArray", + "expressao", "listaExpressoes", "escopoBiblioteca" }; } public static final String[] ruleNames = makeRuleNames(); @@ -177,42 +177,42 @@ public final ArquivoContext arquivo() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(72); + setState(76); match(PROGRAMA); - setState(73); - match(ABRE_CHAVES); setState(77); + match(ABRE_CHAVES); + setState(81); _errHandler.sync(this); _la = _input.LA(1); while (_la==INCLUA) { { { - setState(74); + setState(78); inclusaoBiblioteca(); } } - setState(79); + setState(83); _errHandler.sync(this); _la = _input.LA(1); } - setState(84); + setState(88); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TIPO) | (1L << CONSTANTE) | (1L << FUNCAO))) != 0)) { { - setState(82); + setState(86); _errHandler.sync(this); switch (_input.LA(1)) { case FUNCAO: { - setState(80); + setState(84); declaracaoFuncao(); } break; case TIPO: case CONSTANTE: { - setState(81); + setState(85); listaDeclaracoes(); } break; @@ -220,11 +220,11 @@ public final ArquivoContext arquivo() throws RecognitionException { throw new NoViableAltException(this); } } - setState(86); + setState(90); _errHandler.sync(this); _la = _input.LA(1); } - setState(87); + setState(91); match(FECHA_CHAVES); } } @@ -265,20 +265,20 @@ public final InclusaoBibliotecaContext inclusaoBiblioteca() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(89); + setState(93); match(INCLUA); - setState(90); + setState(94); match(BIBLIOTECA); - setState(91); + setState(95); match(ID); - setState(94); + setState(98); _errHandler.sync(this); _la = _input.LA(1); if (_la==OP_ALIAS_BIBLIOTECA) { { - setState(92); + setState(96); match(OP_ALIAS_BIBLIOTECA); - setState(93); + setState(97); match(ID); } } @@ -327,33 +327,33 @@ public final ListaDeclaracoesContext listaDeclaracoes() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(97); + setState(101); _errHandler.sync(this); _la = _input.LA(1); if (_la==CONSTANTE) { { - setState(96); + setState(100); match(CONSTANTE); } } - setState(99); + setState(103); match(TIPO); - setState(100); + setState(104); declaracao(); - setState(105); + setState(109); _errHandler.sync(this); _la = _input.LA(1); while (_la==VIRGULA) { { { - setState(101); + setState(105); match(VIRGULA); - setState(102); + setState(106); declaracao(); } } - setState(107); + setState(111); _errHandler.sync(this); _la = _input.LA(1); } @@ -395,27 +395,27 @@ public final DeclaracaoContext declaracao() throws RecognitionException { DeclaracaoContext _localctx = new DeclaracaoContext(_ctx, getState()); enterRule(_localctx, 6, RULE_declaracao); try { - setState(111); + setState(115); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(108); + setState(112); declaracaoVariavel(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(109); + setState(113); declaracaoArray(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(110); + setState(114); declaracaoMatriz(); } break; @@ -456,16 +456,16 @@ public final DeclaracaoVariavelContext declaracaoVariavel() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(113); + setState(117); match(ID); - setState(116); + setState(120); _errHandler.sync(this); _la = _input.LA(1); if (_la==OP_ATRIBUICAO) { { - setState(114); + setState(118); match(OP_ATRIBUICAO); - setState(115); + setState(119); expressao(0); } } @@ -521,44 +521,44 @@ public final DeclaracaoMatrizContext declaracaoMatriz() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(118); + setState(122); match(ID); - setState(119); + setState(123); match(ABRE_COLCHETES); - setState(121); + setState(125); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { - setState(120); + setState(124); linhaMatriz(); } } - setState(123); + setState(127); match(FECHA_COLCHETES); - setState(124); + setState(128); match(ABRE_COLCHETES); - setState(126); + setState(130); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { - setState(125); + setState(129); colunaMatriz(); } } - setState(128); + setState(132); match(FECHA_COLCHETES); - setState(131); + setState(135); _errHandler.sync(this); _la = _input.LA(1); if (_la==OP_ATRIBUICAO) { { - setState(129); + setState(133); match(OP_ATRIBUICAO); - setState(130); + setState(134); inicializacaoMatriz(); } } @@ -607,27 +607,27 @@ public final InicializacaoMatrizContext inicializacaoMatriz() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(133); + setState(137); match(ABRE_CHAVES); - setState(134); + setState(138); inicializacaoArray(); - setState(139); + setState(143); _errHandler.sync(this); _la = _input.LA(1); while (_la==VIRGULA) { { { - setState(135); + setState(139); match(VIRGULA); - setState(136); + setState(140); inicializacaoArray(); } } - setState(141); + setState(145); _errHandler.sync(this); _la = _input.LA(1); } - setState(142); + setState(146); match(FECHA_CHAVES); } } @@ -663,7 +663,7 @@ public final LinhaMatrizContext linhaMatriz() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(144); + setState(148); tamanhoArray(); } } @@ -699,7 +699,7 @@ public final ColunaMatrizContext colunaMatriz() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(146); + setState(150); tamanhoArray(); } } @@ -743,30 +743,30 @@ public final DeclaracaoArrayContext declaracaoArray() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(148); + setState(152); match(ID); - setState(149); + setState(153); match(ABRE_COLCHETES); - setState(151); + setState(155); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { - setState(150); + setState(154); tamanhoArray(); } } - setState(153); + setState(157); match(FECHA_COLCHETES); - setState(156); + setState(160); _errHandler.sync(this); _la = _input.LA(1); if (_la==OP_ATRIBUICAO) { { - setState(154); + setState(158); match(OP_ATRIBUICAO); - setState(155); + setState(159); inicializacaoArray(); } } @@ -808,19 +808,19 @@ public final InicializacaoArrayContext inicializacaoArray() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(158); + setState(162); match(ABRE_CHAVES); - setState(160); + setState(164); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { - setState(159); + setState(163); listaExpressoes(); } } - setState(162); + setState(166); match(FECHA_CHAVES); } } @@ -856,7 +856,7 @@ public final TamanhoArrayContext tamanhoArray() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(164); + setState(168); expressao(0); } } @@ -874,14 +874,12 @@ public final TamanhoArrayContext tamanhoArray() throws RecognitionException { public static class DeclaracaoFuncaoContext extends ParserRuleContext { public TerminalNode FUNCAO() { return getToken(PortugolParser.FUNCAO, 0); } public TerminalNode ID() { return getToken(PortugolParser.ID, 0); } - public TerminalNode ABRE_PARENTESES() { return getToken(PortugolParser.ABRE_PARENTESES, 0); } - public TerminalNode FECHA_PARENTESES() { return getToken(PortugolParser.FECHA_PARENTESES, 0); } + public ParametroFuncaoContext parametroFuncao() { + return getRuleContext(ParametroFuncaoContext.class,0); + } public TerminalNode ABRE_CHAVES() { return getToken(PortugolParser.ABRE_CHAVES, 0); } public TerminalNode FECHA_CHAVES() { return getToken(PortugolParser.FECHA_CHAVES, 0); } public TerminalNode TIPO() { return getToken(PortugolParser.TIPO, 0); } - public ListaParametrosContext listaParametros() { - return getRuleContext(ListaParametrosContext.class,0); - } public List comando() { return getRuleContexts(ComandoContext.class); } @@ -906,34 +904,22 @@ public final DeclaracaoFuncaoContext declaracaoFuncao() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(166); + setState(170); match(FUNCAO); - setState(168); + setState(172); _errHandler.sync(this); _la = _input.LA(1); if (_la==TIPO) { { - setState(167); + setState(171); match(TIPO); } } - setState(170); + setState(174); match(ID); - setState(171); - match(ABRE_PARENTESES); - setState(173); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==TIPO) { - { - setState(172); - listaParametros(); - } - } - setState(175); - match(FECHA_PARENTESES); + parametroFuncao(); setState(176); match(ABRE_CHAVES); setState(180); @@ -965,6 +951,57 @@ public final DeclaracaoFuncaoContext declaracaoFuncao() throws RecognitionExcept return _localctx; } + public static class ParametroFuncaoContext extends ParserRuleContext { + public TerminalNode ABRE_PARENTESES() { return getToken(PortugolParser.ABRE_PARENTESES, 0); } + public TerminalNode FECHA_PARENTESES() { return getToken(PortugolParser.FECHA_PARENTESES, 0); } + public ListaParametrosContext listaParametros() { + return getRuleContext(ListaParametrosContext.class,0); + } + public ParametroFuncaoContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parametroFuncao; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PortugolVisitor ) return ((PortugolVisitor)visitor).visitParametroFuncao(this); + else return visitor.visitChildren(this); + } + } + + public final ParametroFuncaoContext parametroFuncao() throws RecognitionException { + ParametroFuncaoContext _localctx = new ParametroFuncaoContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_parametroFuncao); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(185); + match(ABRE_PARENTESES); + setState(187); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==TIPO) { + { + setState(186); + listaParametros(); + } + } + + setState(189); + match(FECHA_PARENTESES); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public static class ListaParametrosContext extends ParserRuleContext { public List parametro() { return getRuleContexts(ParametroContext.class); @@ -989,26 +1026,26 @@ public T accept(ParseTreeVisitor visitor) { public final ListaParametrosContext listaParametros() throws RecognitionException { ListaParametrosContext _localctx = new ListaParametrosContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_listaParametros); + enterRule(_localctx, 28, RULE_listaParametros); int _la; try { enterOuterAlt(_localctx, 1); { - setState(185); + setState(191); parametro(); - setState(190); + setState(196); _errHandler.sync(this); _la = _input.LA(1); while (_la==VIRGULA) { { { - setState(186); + setState(192); match(VIRGULA); - setState(187); + setState(193); parametro(); } } - setState(192); + setState(198); _errHandler.sync(this); _la = _input.LA(1); } @@ -1048,37 +1085,37 @@ public T accept(ParseTreeVisitor visitor) { public final ParametroContext parametro() throws RecognitionException { ParametroContext _localctx = new ParametroContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_parametro); + enterRule(_localctx, 30, RULE_parametro); int _la; try { enterOuterAlt(_localctx, 1); { - setState(193); + setState(199); match(TIPO); - setState(195); + setState(201); _errHandler.sync(this); _la = _input.LA(1); if (_la==E_COMERCIAL) { { - setState(194); + setState(200); match(E_COMERCIAL); } } - setState(197); + setState(203); match(ID); - setState(200); + setState(206); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { case 1: { - setState(198); + setState(204); parametroArray(); } break; case 2: { - setState(199); + setState(205); parametroMatriz(); } break; @@ -1112,13 +1149,13 @@ public T accept(ParseTreeVisitor visitor) { public final ParametroArrayContext parametroArray() throws RecognitionException { ParametroArrayContext _localctx = new ParametroArrayContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_parametroArray); + enterRule(_localctx, 32, RULE_parametroArray); try { enterOuterAlt(_localctx, 1); { - setState(202); + setState(208); match(ABRE_COLCHETES); - setState(203); + setState(209); match(FECHA_COLCHETES); } } @@ -1155,17 +1192,17 @@ public T accept(ParseTreeVisitor visitor) { public final ParametroMatrizContext parametroMatriz() throws RecognitionException { ParametroMatrizContext _localctx = new ParametroMatrizContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_parametroMatriz); + enterRule(_localctx, 34, RULE_parametroMatriz); try { enterOuterAlt(_localctx, 1); { - setState(205); + setState(211); match(ABRE_COLCHETES); - setState(206); + setState(212); match(FECHA_COLCHETES); - setState(207); + setState(213); match(ABRE_COLCHETES); - setState(208); + setState(214); match(FECHA_COLCHETES); } } @@ -1227,85 +1264,85 @@ public T accept(ParseTreeVisitor visitor) { public final ComandoContext comando() throws RecognitionException { ComandoContext _localctx = new ComandoContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_comando); + enterRule(_localctx, 36, RULE_comando); try { - setState(221); + setState(227); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(210); + setState(216); listaDeclaracoes(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(211); + setState(217); se(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(212); + setState(218); enquanto(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(213); + setState(219); facaEnquanto(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(214); + setState(220); para(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(215); + setState(221); escolha(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(216); + setState(222); retorne(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(217); + setState(223); pare(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(218); + setState(224); atribuicao(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(219); + setState(225); atribuicaoComposta(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(220); + setState(226); expressao(0); } break; @@ -1343,15 +1380,15 @@ public T accept(ParseTreeVisitor visitor) { public final AtribuicaoContext atribuicao() throws RecognitionException { AtribuicaoContext _localctx = new AtribuicaoContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_atribuicao); + enterRule(_localctx, 38, RULE_atribuicao); try { enterOuterAlt(_localctx, 1); { - setState(223); + setState(229); expressao(0); - setState(224); + setState(230); match(OP_ATRIBUICAO); - setState(225); + setState(231); expressao(0); } } @@ -1440,20 +1477,20 @@ public T accept(ParseTreeVisitor visitor) { public final AtribuicaoCompostaContext atribuicaoComposta() throws RecognitionException { AtribuicaoCompostaContext _localctx = new AtribuicaoCompostaContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_atribuicaoComposta); + enterRule(_localctx, 40, RULE_atribuicaoComposta); try { - setState(243); + setState(249); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { case 1: _localctx = new AtribuicaoCompostaSomaContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(227); + setState(233); expressao(0); - setState(228); + setState(234); match(OP_MAIS_IGUAL); - setState(229); + setState(235); expressao(0); } break; @@ -1461,11 +1498,11 @@ public final AtribuicaoCompostaContext atribuicaoComposta() throws RecognitionEx _localctx = new AtribuicaoCompostaSubtracaoContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(231); + setState(237); expressao(0); - setState(232); + setState(238); match(OP_MENOS_IGUAL); - setState(233); + setState(239); expressao(0); } break; @@ -1473,11 +1510,11 @@ public final AtribuicaoCompostaContext atribuicaoComposta() throws RecognitionEx _localctx = new AtribuicaoCompostaMultiplicacaoContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(235); + setState(241); expressao(0); - setState(236); + setState(242); match(OP_MULTIPLICACAO_IGUAL); - setState(237); + setState(243); expressao(0); } break; @@ -1485,11 +1522,11 @@ public final AtribuicaoCompostaContext atribuicaoComposta() throws RecognitionEx _localctx = new AtribuicaoCompostaDivisaoContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(239); + setState(245); expressao(0); - setState(240); + setState(246); match(OP_DIVISAO_IGUAL); - setState(241); + setState(247); expressao(0); } break; @@ -1524,18 +1561,18 @@ public T accept(ParseTreeVisitor visitor) { public final RetorneContext retorne() throws RecognitionException { RetorneContext _localctx = new RetorneContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_retorne); + enterRule(_localctx, 42, RULE_retorne); try { enterOuterAlt(_localctx, 1); { - setState(245); + setState(251); match(RETORNE); - setState(247); + setState(253); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { case 1: { - setState(246); + setState(252); expressao(0); } break; @@ -1560,13 +1597,12 @@ public ExpressaoContext expressao() { return getRuleContext(ExpressaoContext.class,0); } public TerminalNode FECHA_PARENTESES() { return getToken(PortugolParser.FECHA_PARENTESES, 0); } - public List listaComandos() { - return getRuleContexts(ListaComandosContext.class); + public ListaComandosContext listaComandos() { + return getRuleContext(ListaComandosContext.class,0); } - public ListaComandosContext listaComandos(int i) { - return getRuleContext(ListaComandosContext.class,i); + public SenaoContext senao() { + return getRuleContext(SenaoContext.class,0); } - public TerminalNode SENAO() { return getToken(PortugolParser.SENAO, 0); } public SeContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1580,29 +1616,27 @@ public T accept(ParseTreeVisitor visitor) { public final SeContext se() throws RecognitionException { SeContext _localctx = new SeContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_se); + enterRule(_localctx, 44, RULE_se); try { enterOuterAlt(_localctx, 1); { - setState(249); + setState(255); match(SE); - setState(250); + setState(256); match(ABRE_PARENTESES); - setState(251); + setState(257); expressao(0); - setState(252); + setState(258); match(FECHA_PARENTESES); - setState(253); + setState(259); listaComandos(); - setState(256); + setState(261); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: { - setState(254); - match(SENAO); - setState(255); - listaComandos(); + setState(260); + senao(); } break; } @@ -1619,6 +1653,45 @@ public final SeContext se() throws RecognitionException { return _localctx; } + public static class SenaoContext extends ParserRuleContext { + public TerminalNode SENAO() { return getToken(PortugolParser.SENAO, 0); } + public ListaComandosContext listaComandos() { + return getRuleContext(ListaComandosContext.class,0); + } + public SenaoContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_senao; } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PortugolVisitor ) return ((PortugolVisitor)visitor).visitSenao(this); + else return visitor.visitChildren(this); + } + } + + public final SenaoContext senao() throws RecognitionException { + SenaoContext _localctx = new SenaoContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_senao); + try { + enterOuterAlt(_localctx, 1); + { + setState(263); + match(SENAO); + setState(264); + listaComandos(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public static class EnquantoContext extends ParserRuleContext { public TerminalNode ENQUANTO() { return getToken(PortugolParser.ENQUANTO, 0); } public TerminalNode ABRE_PARENTESES() { return getToken(PortugolParser.ABRE_PARENTESES, 0); } @@ -1642,19 +1715,19 @@ public T accept(ParseTreeVisitor visitor) { public final EnquantoContext enquanto() throws RecognitionException { EnquantoContext _localctx = new EnquantoContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_enquanto); + enterRule(_localctx, 48, RULE_enquanto); try { enterOuterAlt(_localctx, 1); { - setState(258); + setState(266); match(ENQUANTO); - setState(259); + setState(267); match(ABRE_PARENTESES); - setState(260); + setState(268); expressao(0); - setState(261); + setState(269); match(FECHA_PARENTESES); - setState(262); + setState(270); listaComandos(); } } @@ -1693,21 +1766,21 @@ public T accept(ParseTreeVisitor visitor) { public final FacaEnquantoContext facaEnquanto() throws RecognitionException { FacaEnquantoContext _localctx = new FacaEnquantoContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_facaEnquanto); + enterRule(_localctx, 50, RULE_facaEnquanto); try { enterOuterAlt(_localctx, 1); { - setState(264); + setState(272); match(FACA); - setState(265); + setState(273); listaComandos(); - setState(266); + setState(274); match(ENQUANTO); - setState(267); + setState(275); match(ABRE_PARENTESES); - setState(268); + setState(276); expressao(0); - setState(269); + setState(277); match(FECHA_PARENTESES); } } @@ -1755,36 +1828,36 @@ public T accept(ParseTreeVisitor visitor) { public final ParaContext para() throws RecognitionException { ParaContext _localctx = new ParaContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_para); + enterRule(_localctx, 52, RULE_para); int _la; try { enterOuterAlt(_localctx, 1); { - setState(271); + setState(279); match(PARA); - setState(272); + setState(280); match(ABRE_PARENTESES); - setState(274); + setState(282); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << TIPO) | (1L << CONSTANTE) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { - setState(273); + setState(281); inicializacaoPara(); } } - setState(276); + setState(284); match(PONTOVIRGULA); - setState(277); + setState(285); condicao(); - setState(278); + setState(286); match(PONTOVIRGULA); - setState(279); + setState(287); incrementoPara(); - setState(280); + setState(288); match(FECHA_PARENTESES); - setState(281); + setState(289); listaComandos(); } } @@ -1821,33 +1894,33 @@ public T accept(ParseTreeVisitor visitor) { public final ListaComandosContext listaComandos() throws RecognitionException { ListaComandosContext _localctx = new ListaComandosContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_listaComandos); + enterRule(_localctx, 54, RULE_listaComandos); int _la; try { enterOuterAlt(_localctx, 1); { - setState(292); + setState(300); _errHandler.sync(this); switch (_input.LA(1)) { case ABRE_CHAVES: { - setState(283); + setState(291); match(ABRE_CHAVES); - setState(287); + setState(295); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << TIPO) | (1L << FACA) | (1L << ENQUANTO) | (1L << PARA) | (1L << SE) | (1L << CONSTANTE) | (1L << ESCOLHA) | (1L << PARE) | (1L << RETORNE) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { { - setState(284); + setState(292); comando(); } } - setState(289); + setState(297); _errHandler.sync(this); _la = _input.LA(1); } - setState(290); + setState(298); match(FECHA_CHAVES); } break; @@ -1875,7 +1948,7 @@ public final ListaComandosContext listaComandos() throws RecognitionException { case INT: case HEXADECIMAL: { - setState(291); + setState(299); comando(); } break; @@ -1916,29 +1989,29 @@ public T accept(ParseTreeVisitor visitor) { public final InicializacaoParaContext inicializacaoPara() throws RecognitionException { InicializacaoParaContext _localctx = new InicializacaoParaContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_inicializacaoPara); + enterRule(_localctx, 56, RULE_inicializacaoPara); try { - setState(297); + setState(305); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(294); + setState(302); atribuicao(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(295); + setState(303); listaDeclaracoes(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(296); + setState(304); match(ID); } break; @@ -1972,11 +2045,11 @@ public T accept(ParseTreeVisitor visitor) { public final CondicaoContext condicao() throws RecognitionException { CondicaoContext _localctx = new CondicaoContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_condicao); + enterRule(_localctx, 58, RULE_condicao); try { enterOuterAlt(_localctx, 1); { - setState(299); + setState(307); expressao(0); } } @@ -2014,29 +2087,29 @@ public T accept(ParseTreeVisitor visitor) { public final IncrementoParaContext incrementoPara() throws RecognitionException { IncrementoParaContext _localctx = new IncrementoParaContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_incrementoPara); + enterRule(_localctx, 60, RULE_incrementoPara); try { - setState(304); + setState(312); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(301); + setState(309); expressao(0); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(302); + setState(310); atribuicaoComposta(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(303); + setState(311); atribuicao(); } break; @@ -2081,36 +2154,36 @@ public T accept(ParseTreeVisitor visitor) { public final EscolhaContext escolha() throws RecognitionException { EscolhaContext _localctx = new EscolhaContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_escolha); + enterRule(_localctx, 62, RULE_escolha); int _la; try { enterOuterAlt(_localctx, 1); { - setState(306); + setState(314); match(ESCOLHA); - setState(307); + setState(315); match(ABRE_PARENTESES); - setState(308); + setState(316); expressao(0); - setState(309); + setState(317); match(FECHA_PARENTESES); - setState(310); + setState(318); match(ABRE_CHAVES); - setState(314); + setState(322); _errHandler.sync(this); _la = _input.LA(1); while (_la==CASO) { { { - setState(311); + setState(319); caso(); } } - setState(316); + setState(324); _errHandler.sync(this); _la = _input.LA(1); } - setState(317); + setState(325); match(FECHA_CHAVES); } } @@ -2156,20 +2229,20 @@ public T accept(ParseTreeVisitor visitor) { public final CasoContext caso() throws RecognitionException { CasoContext _localctx = new CasoContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_caso); + enterRule(_localctx, 64, RULE_caso); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(319); + setState(327); match(CASO); - setState(322); + setState(330); _errHandler.sync(this); switch (_input.LA(1)) { case CONTRARIO: { - setState(320); + setState(328); match(CONTRARIO); } break; @@ -2188,16 +2261,16 @@ public final CasoContext caso() throws RecognitionException { case INT: case HEXADECIMAL: { - setState(321); + setState(329); expressao(0); } break; default: throw new NoViableAltException(this); } - setState(324); + setState(332); match(DOISPONTOS); - setState(339); + setState(347); _errHandler.sync(this); switch (_input.LA(1)) { case ABRE_PARENTESES: @@ -2226,19 +2299,19 @@ public final CasoContext caso() throws RecognitionException { case INT: case HEXADECIMAL: { - setState(328); + setState(336); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,32,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(325); + setState(333); comando(); } } } - setState(330); + setState(338); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,32,_ctx); } @@ -2246,35 +2319,35 @@ public final CasoContext caso() throws RecognitionException { break; case ABRE_CHAVES: { - setState(331); + setState(339); match(ABRE_CHAVES); - setState(335); + setState(343); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << TIPO) | (1L << FACA) | (1L << ENQUANTO) | (1L << PARA) | (1L << SE) | (1L << CONSTANTE) | (1L << ESCOLHA) | (1L << PARE) | (1L << RETORNE) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { { - setState(332); + setState(340); comando(); } } - setState(337); + setState(345); _errHandler.sync(this); _la = _input.LA(1); } - setState(338); + setState(346); match(FECHA_CHAVES); } break; default: throw new NoViableAltException(this); } - setState(342); + setState(350); _errHandler.sync(this); _la = _input.LA(1); if (_la==PARE) { { - setState(341); + setState(349); pare(); } } @@ -2307,11 +2380,11 @@ public T accept(ParseTreeVisitor visitor) { public final PareContext pare() throws RecognitionException { PareContext _localctx = new PareContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_pare); + enterRule(_localctx, 66, RULE_pare); try { enterOuterAlt(_localctx, 1); { - setState(344); + setState(352); match(PARE); } } @@ -2345,15 +2418,15 @@ public T accept(ParseTreeVisitor visitor) { public final IndiceArrayContext indiceArray() throws RecognitionException { IndiceArrayContext _localctx = new IndiceArrayContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_indiceArray); + enterRule(_localctx, 68, RULE_indiceArray); try { enterOuterAlt(_localctx, 1); { - setState(346); + setState(354); match(ABRE_COLCHETES); - setState(347); + setState(355); expressao(0); - setState(348); + setState(356); match(FECHA_COLCHETES); } } @@ -2892,14 +2965,14 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { int _parentState = getState(); ExpressaoContext _localctx = new ExpressaoContext(_ctx, _parentState); ExpressaoContext _prevctx = _localctx; - int _startState = 66; - enterRecursionRule(_localctx, 66, RULE_expressao, _p); + int _startState = 70; + enterRecursionRule(_localctx, 70, RULE_expressao, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(426); + setState(434); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { case 1: @@ -2908,31 +2981,31 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(352); + setState(360); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { case 1: { - setState(351); + setState(359); escopoBiblioteca(); } break; } - setState(354); + setState(362); match(ID); - setState(355); + setState(363); match(ABRE_PARENTESES); - setState(357); + setState(365); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ABRE_PARENTESES) | (1L << OP_NAO) | (1L << OP_SUBTRACAO) | (1L << OP_ADICAO) | (1L << OP_INCREMENTO_UNARIO) | (1L << OP_DECREMENTO_UNARIO) | (1L << OP_NOT_BITWISE) | (1L << LOGICO) | (1L << CARACTER) | (1L << STRING) | (1L << ID) | (1L << REAL) | (1L << INT) | (1L << HEXADECIMAL))) != 0)) { { - setState(356); + setState(364); listaExpressoes(); } } - setState(359); + setState(367); match(FECHA_PARENTESES); } break; @@ -2941,19 +3014,19 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new ReferenciaArrayContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(361); + setState(369); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { case 1: { - setState(360); + setState(368); escopoBiblioteca(); } break; } - setState(363); + setState(371); match(ID); - setState(364); + setState(372); indiceArray(); } break; @@ -2962,26 +3035,26 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new ReferenciaMatrizContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(366); + setState(374); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { - setState(365); + setState(373); escopoBiblioteca(); } break; } - setState(368); + setState(376); match(ID); - setState(369); + setState(377); indiceArray(); - setState(371); + setState(379); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { case 1: { - setState(370); + setState(378); indiceArray(); } break; @@ -2993,9 +3066,9 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new MenosUnarioContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(373); + setState(381); match(OP_SUBTRACAO); - setState(374); + setState(382); expressao(33); } break; @@ -3004,9 +3077,9 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new MaisUnarioContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(375); + setState(383); match(OP_ADICAO); - setState(376); + setState(384); expressao(32); } break; @@ -3015,9 +3088,9 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new NegacaoContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(377); + setState(385); match(OP_NAO); - setState(378); + setState(386); expressao(31); } break; @@ -3026,9 +3099,9 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new NegacaoBitwiseContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(379); + setState(387); match(OP_NOT_BITWISE); - setState(380); + setState(388); expressao(30); } break; @@ -3037,21 +3110,21 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new IncrementoUnarioPosfixadoContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(381); + setState(389); match(ID); - setState(386); + setState(394); _errHandler.sync(this); _la = _input.LA(1); if (_la==ABRE_COLCHETES) { { - setState(382); + setState(390); indiceArray(); - setState(384); + setState(392); _errHandler.sync(this); _la = _input.LA(1); if (_la==ABRE_COLCHETES) { { - setState(383); + setState(391); indiceArray(); } } @@ -3059,7 +3132,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { } } - setState(388); + setState(396); match(OP_INCREMENTO_UNARIO); } break; @@ -3068,21 +3141,21 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new DecrementoUnarioPosfixadoContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(389); + setState(397); match(ID); - setState(394); + setState(402); _errHandler.sync(this); _la = _input.LA(1); if (_la==ABRE_COLCHETES) { { - setState(390); + setState(398); indiceArray(); - setState(392); + setState(400); _errHandler.sync(this); _la = _input.LA(1); if (_la==ABRE_COLCHETES) { { - setState(391); + setState(399); indiceArray(); } } @@ -3090,7 +3163,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { } } - setState(396); + setState(404); match(OP_DECREMENTO_UNARIO); } break; @@ -3099,23 +3172,23 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new IncrementoUnarioPrefixadoContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(397); + setState(405); match(OP_INCREMENTO_UNARIO); - setState(398); + setState(406); match(ID); - setState(403); + setState(411); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { case 1: { - setState(399); + setState(407); indiceArray(); - setState(401); + setState(409); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { case 1: { - setState(400); + setState(408); indiceArray(); } break; @@ -3130,23 +3203,23 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new DecrementoUnarioPrefixadoContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(405); + setState(413); match(OP_DECREMENTO_UNARIO); - setState(406); + setState(414); match(ID); - setState(411); + setState(419); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { case 1: { - setState(407); + setState(415); indiceArray(); - setState(409); + setState(417); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { case 1: { - setState(408); + setState(416); indiceArray(); } break; @@ -3161,17 +3234,17 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new ReferenciaParaVariavelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(414); + setState(422); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) { case 1: { - setState(413); + setState(421); escopoBiblioteca(); } break; } - setState(416); + setState(424); match(ID); } break; @@ -3180,7 +3253,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new NumeroInteiroContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(417); + setState(425); _la = _input.LA(1); if ( !(_la==INT || _la==HEXADECIMAL) ) { _errHandler.recoverInline(this); @@ -3197,7 +3270,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new NumeroRealContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(418); + setState(426); match(REAL); } break; @@ -3206,7 +3279,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new ValorLogicoContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(419); + setState(427); match(LOGICO); } break; @@ -3215,7 +3288,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new CaracterContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(420); + setState(428); match(CARACTER); } break; @@ -3224,7 +3297,7 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new StringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(421); + setState(429); match(STRING); } break; @@ -3233,17 +3306,17 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { _localctx = new ExpressaoEntreParentesesContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(422); + setState(430); match(ABRE_PARENTESES); - setState(423); + setState(431); expressao(0); - setState(424); + setState(432); match(FECHA_PARENTESES); } break; } _ctx.stop = _input.LT(-1); - setState(484); + setState(492); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,52,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3251,18 +3324,18 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(482); + setState(490); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { case 1: { _localctx = new MultiplicacaoContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(428); + setState(436); if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(429); + setState(437); match(OP_MULTIPLICACAO); - setState(430); + setState(438); expressao(26); } break; @@ -3270,11 +3343,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new DivisaoContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(431); + setState(439); if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)"); - setState(432); + setState(440); match(OP_DIVISAO); - setState(433); + setState(441); expressao(25); } break; @@ -3282,11 +3355,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new ModuloContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(434); + setState(442); if (!(precpred(_ctx, 23))) throw new FailedPredicateException(this, "precpred(_ctx, 23)"); - setState(435); + setState(443); match(OP_MOD); - setState(436); + setState(444); expressao(24); } break; @@ -3294,11 +3367,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new AdicaoContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(437); + setState(445); if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(438); + setState(446); match(OP_ADICAO); - setState(439); + setState(447); expressao(23); } break; @@ -3306,11 +3379,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new SubtracaoContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(440); + setState(448); if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(441); + setState(449); match(OP_SUBTRACAO); - setState(442); + setState(450); expressao(22); } break; @@ -3318,11 +3391,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoIgualdadeContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(443); + setState(451); if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(444); + setState(452); match(OP_IGUALDADE); - setState(445); + setState(453); expressao(21); } break; @@ -3330,11 +3403,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoDiferencaContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(446); + setState(454); if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(447); + setState(455); match(OP_DIFERENCA); - setState(448); + setState(456); expressao(20); } break; @@ -3342,11 +3415,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoMaiorContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(449); + setState(457); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(450); + setState(458); match(OP_MAIOR); - setState(451); + setState(459); expressao(19); } break; @@ -3354,11 +3427,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoMenorContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(452); + setState(460); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(453); + setState(461); match(OP_MENOR); - setState(454); + setState(462); expressao(18); } break; @@ -3366,11 +3439,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoMenorIgualContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(455); + setState(463); if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(456); + setState(464); match(OP_MENOR_IGUAL); - setState(457); + setState(465); expressao(17); } break; @@ -3378,11 +3451,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoMaiorIgualContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(458); + setState(466); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(459); + setState(467); match(OP_MAIOR_IGUAL); - setState(460); + setState(468); expressao(16); } break; @@ -3390,11 +3463,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoELogicoContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(461); + setState(469); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(462); + setState(470); match(OP_E_LOGICO); - setState(463); + setState(471); expressao(15); } break; @@ -3402,11 +3475,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoOuLogicoContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(464); + setState(472); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(465); + setState(473); match(OP_OU_LOGICO); - setState(466); + setState(474); expressao(14); } break; @@ -3414,11 +3487,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoXorContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(467); + setState(475); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(468); + setState(476); match(OP_XOR); - setState(469); + setState(477); expressao(13); } break; @@ -3426,11 +3499,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoShiftLeftContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(470); + setState(478); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(471); + setState(479); match(OP_SHIFT_LEFT); - setState(472); + setState(480); expressao(12); } break; @@ -3438,11 +3511,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoShiftRightContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(473); + setState(481); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(474); + setState(482); match(OP_SHIFT_RIGHT); - setState(475); + setState(483); expressao(11); } break; @@ -3450,11 +3523,11 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoAndBitwiseContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(476); + setState(484); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(477); + setState(485); match(E_COMERCIAL); - setState(478); + setState(486); expressao(10); } break; @@ -3462,18 +3535,18 @@ private ExpressaoContext expressao(int _p) throws RecognitionException { { _localctx = new OperacaoOrBitwiseContext(new ExpressaoContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expressao); - setState(479); + setState(487); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(480); + setState(488); match(OP_OU_BITWISE); - setState(481); + setState(489); expressao(9); } break; } } } - setState(486); + setState(494); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,52,_ctx); } @@ -3526,66 +3599,66 @@ public T accept(ParseTreeVisitor visitor) { public final ListaExpressoesContext listaExpressoes() throws RecognitionException { ListaExpressoesContext _localctx = new ListaExpressoesContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_listaExpressoes); + enterRule(_localctx, 72, RULE_listaExpressoes); int _la; try { enterOuterAlt(_localctx, 1); { - setState(490); + setState(498); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) { case 1: { - setState(487); + setState(495); expressao(0); } break; case 2: { - setState(488); + setState(496); atribuicaoComposta(); } break; case 3: { - setState(489); + setState(497); atribuicao(); } break; } - setState(500); + setState(508); _errHandler.sync(this); _la = _input.LA(1); while (_la==VIRGULA) { { { - setState(492); + setState(500); match(VIRGULA); - setState(496); + setState(504); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: { - setState(493); + setState(501); expressao(0); } break; case 2: { - setState(494); + setState(502); atribuicaoComposta(); } break; case 3: { - setState(495); + setState(503); atribuicao(); } break; } } } - setState(502); + setState(510); _errHandler.sync(this); _la = _input.LA(1); } @@ -3618,14 +3691,14 @@ public T accept(ParseTreeVisitor visitor) { public final EscopoBibliotecaContext escopoBiblioteca() throws RecognitionException { EscopoBibliotecaContext _localctx = new EscopoBibliotecaContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_escopoBiblioteca); + enterRule(_localctx, 74, RULE_escopoBiblioteca); try { enterOuterAlt(_localctx, 1); { { - setState(503); + setState(511); match(ID); - setState(504); + setState(512); match(PONTO); } } @@ -3643,7 +3716,7 @@ public final EscopoBibliotecaContext escopoBiblioteca() throws RecognitionExcept public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 33: + case 35: return expressao_sempred((ExpressaoContext)_localctx, predIndex); } return true; @@ -3691,196 +3764,198 @@ private boolean expressao_sempred(ExpressaoContext _localctx, int predIndex) { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3D\u01fd\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3D\u0205\4\2\t\2\4"+ "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\3\2\3\2\3\2\7\2N\n\2\f\2\16\2Q\13\2\3\2"+ - "\3\2\7\2U\n\2\f\2\16\2X\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\5\3a\n\3\3\4"+ - "\5\4d\n\4\3\4\3\4\3\4\3\4\7\4j\n\4\f\4\16\4m\13\4\3\5\3\5\3\5\5\5r\n\5"+ - "\3\6\3\6\3\6\5\6w\n\6\3\7\3\7\3\7\5\7|\n\7\3\7\3\7\3\7\5\7\u0081\n\7\3"+ - "\7\3\7\3\7\5\7\u0086\n\7\3\b\3\b\3\b\3\b\7\b\u008c\n\b\f\b\16\b\u008f"+ - "\13\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\5\13\u009a\n\13\3\13\3\13"+ - "\3\13\5\13\u009f\n\13\3\f\3\f\5\f\u00a3\n\f\3\f\3\f\3\r\3\r\3\16\3\16"+ - "\5\16\u00ab\n\16\3\16\3\16\3\16\5\16\u00b0\n\16\3\16\3\16\3\16\7\16\u00b5"+ - "\n\16\f\16\16\16\u00b8\13\16\3\16\3\16\3\17\3\17\3\17\7\17\u00bf\n\17"+ - "\f\17\16\17\u00c2\13\17\3\20\3\20\5\20\u00c6\n\20\3\20\3\20\3\20\5\20"+ - "\u00cb\n\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u00e0\n\23\3\24\3\24\3\24\3\24"+ - "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\5\25\u00f6\n\25\3\26\3\26\5\26\u00fa\n\26\3\27\3\27\3\27\3"+ - "\27\3\27\3\27\3\27\5\27\u0103\n\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31"+ - "\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\5\32\u0115\n\32\3\32\3\32"+ - "\3\32\3\32\3\32\3\32\3\32\3\33\3\33\7\33\u0120\n\33\f\33\16\33\u0123\13"+ - "\33\3\33\3\33\5\33\u0127\n\33\3\34\3\34\3\34\5\34\u012c\n\34\3\35\3\35"+ - "\3\36\3\36\3\36\5\36\u0133\n\36\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u013b"+ - "\n\37\f\37\16\37\u013e\13\37\3\37\3\37\3 \3 \3 \5 \u0145\n \3 \3 \7 \u0149"+ - "\n \f \16 \u014c\13 \3 \3 \7 \u0150\n \f \16 \u0153\13 \3 \5 \u0156\n"+ - " \3 \5 \u0159\n \3!\3!\3\"\3\"\3\"\3\"\3#\3#\5#\u0163\n#\3#\3#\3#\5#\u0168"+ - "\n#\3#\3#\5#\u016c\n#\3#\3#\3#\5#\u0171\n#\3#\3#\3#\5#\u0176\n#\3#\3#"+ - "\3#\3#\3#\3#\3#\3#\3#\3#\3#\5#\u0183\n#\5#\u0185\n#\3#\3#\3#\3#\5#\u018b"+ - "\n#\5#\u018d\n#\3#\3#\3#\3#\3#\5#\u0194\n#\5#\u0196\n#\3#\3#\3#\3#\5#"+ - "\u019c\n#\5#\u019e\n#\3#\5#\u01a1\n#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\5#"+ - "\u01ad\n#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#"+ - "\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#"+ - "\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\7#\u01e5\n#\f#\16#\u01e8\13#\3$\3$\3"+ - "$\5$\u01ed\n$\3$\3$\3$\3$\5$\u01f3\n$\7$\u01f5\n$\f$\16$\u01f8\13$\3%"+ - "\3%\3%\3%\2\3D&\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62"+ - "\64\668:<>@BDFH\2\3\3\2<=\2\u0241\2J\3\2\2\2\4[\3\2\2\2\6c\3\2\2\2\bq"+ - "\3\2\2\2\ns\3\2\2\2\fx\3\2\2\2\16\u0087\3\2\2\2\20\u0092\3\2\2\2\22\u0094"+ - "\3\2\2\2\24\u0096\3\2\2\2\26\u00a0\3\2\2\2\30\u00a6\3\2\2\2\32\u00a8\3"+ - "\2\2\2\34\u00bb\3\2\2\2\36\u00c3\3\2\2\2 \u00cc\3\2\2\2\"\u00cf\3\2\2"+ - "\2$\u00df\3\2\2\2&\u00e1\3\2\2\2(\u00f5\3\2\2\2*\u00f7\3\2\2\2,\u00fb"+ - "\3\2\2\2.\u0104\3\2\2\2\60\u010a\3\2\2\2\62\u0111\3\2\2\2\64\u0126\3\2"+ - "\2\2\66\u012b\3\2\2\28\u012d\3\2\2\2:\u0132\3\2\2\2<\u0134\3\2\2\2>\u0141"+ - "\3\2\2\2@\u015a\3\2\2\2B\u015c\3\2\2\2D\u01ac\3\2\2\2F\u01ec\3\2\2\2H"+ - "\u01f9\3\2\2\2JK\7\21\2\2KO\7\7\2\2LN\5\4\3\2ML\3\2\2\2NQ\3\2\2\2OM\3"+ - "\2\2\2OP\3\2\2\2PV\3\2\2\2QO\3\2\2\2RU\5\32\16\2SU\5\6\4\2TR\3\2\2\2T"+ - "S\3\2\2\2UX\3\2\2\2VT\3\2\2\2VW\3\2\2\2WY\3\2\2\2XV\3\2\2\2YZ\7\b\2\2"+ - "Z\3\3\2\2\2[\\\7\27\2\2\\]\7\30\2\2]`\7:\2\2^_\7/\2\2_a\7:\2\2`^\3\2\2"+ - "\2`a\3\2\2\2a\5\3\2\2\2bd\7\17\2\2cb\3\2\2\2cd\3\2\2\2de\3\2\2\2ef\7\t"+ - "\2\2fk\5\b\5\2gh\7B\2\2hj\5\b\5\2ig\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2"+ - "\2\2l\7\3\2\2\2mk\3\2\2\2nr\5\n\6\2or\5\24\13\2pr\5\f\7\2qn\3\2\2\2qo"+ - "\3\2\2\2qp\3\2\2\2r\t\3\2\2\2sv\7:\2\2tu\7!\2\2uw\5D#\2vt\3\2\2\2vw\3"+ - "\2\2\2w\13\3\2\2\2xy\7:\2\2y{\7\5\2\2z|\5\20\t\2{z\3\2\2\2{|\3\2\2\2|"+ - "}\3\2\2\2}~\7\6\2\2~\u0080\7\5\2\2\177\u0081\5\22\n\2\u0080\177\3\2\2"+ - "\2\u0080\u0081\3\2\2\2\u0081\u0082\3\2\2\2\u0082\u0085\7\6\2\2\u0083\u0084"+ - "\7!\2\2\u0084\u0086\5\16\b\2\u0085\u0083\3\2\2\2\u0085\u0086\3\2\2\2\u0086"+ - "\r\3\2\2\2\u0087\u0088\7\7\2\2\u0088\u008d\5\26\f\2\u0089\u008a\7B\2\2"+ - "\u008a\u008c\5\26\f\2\u008b\u0089\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b"+ - "\3\2\2\2\u008d\u008e\3\2\2\2\u008e\u0090\3\2\2\2\u008f\u008d\3\2\2\2\u0090"+ - "\u0091\7\b\2\2\u0091\17\3\2\2\2\u0092\u0093\5\30\r\2\u0093\21\3\2\2\2"+ - "\u0094\u0095\5\30\r\2\u0095\23\3\2\2\2\u0096\u0097\7:\2\2\u0097\u0099"+ - "\7\5\2\2\u0098\u009a\5\30\r\2\u0099\u0098\3\2\2\2\u0099\u009a\3\2\2\2"+ - "\u009a\u009b\3\2\2\2\u009b\u009e\7\6\2\2\u009c\u009d\7!\2\2\u009d\u009f"+ - "\5\26\f\2\u009e\u009c\3\2\2\2\u009e\u009f\3\2\2\2\u009f\25\3\2\2\2\u00a0"+ - "\u00a2\7\7\2\2\u00a1\u00a3\5F$\2\u00a2\u00a1\3\2\2\2\u00a2\u00a3\3\2\2"+ - "\2\u00a3\u00a4\3\2\2\2\u00a4\u00a5\7\b\2\2\u00a5\27\3\2\2\2\u00a6\u00a7"+ - "\5D#\2\u00a7\31\3\2\2\2\u00a8\u00aa\7\20\2\2\u00a9\u00ab\7\t\2\2\u00aa"+ - "\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad\7:"+ - "\2\2\u00ad\u00af\7\3\2\2\u00ae\u00b0\5\34\17\2\u00af\u00ae\3\2\2\2\u00af"+ - "\u00b0\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7\4\2\2\u00b2\u00b6\7\7"+ - "\2\2\u00b3\u00b5\5$\23\2\u00b4\u00b3\3\2\2\2\u00b5\u00b8\3\2\2\2\u00b6"+ + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\3\2\3\2\3\2\7\2R\n\2\f\2\16"+ + "\2U\13\2\3\2\3\2\7\2Y\n\2\f\2\16\2\\\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3"+ + "\5\3e\n\3\3\4\5\4h\n\4\3\4\3\4\3\4\3\4\7\4n\n\4\f\4\16\4q\13\4\3\5\3\5"+ + "\3\5\5\5v\n\5\3\6\3\6\3\6\5\6{\n\6\3\7\3\7\3\7\5\7\u0080\n\7\3\7\3\7\3"+ + "\7\5\7\u0085\n\7\3\7\3\7\3\7\5\7\u008a\n\7\3\b\3\b\3\b\3\b\7\b\u0090\n"+ + "\b\f\b\16\b\u0093\13\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\5\13\u009e"+ + "\n\13\3\13\3\13\3\13\5\13\u00a3\n\13\3\f\3\f\5\f\u00a7\n\f\3\f\3\f\3\r"+ + "\3\r\3\16\3\16\5\16\u00af\n\16\3\16\3\16\3\16\3\16\7\16\u00b5\n\16\f\16"+ + "\16\16\u00b8\13\16\3\16\3\16\3\17\3\17\5\17\u00be\n\17\3\17\3\17\3\20"+ + "\3\20\3\20\7\20\u00c5\n\20\f\20\16\20\u00c8\13\20\3\21\3\21\5\21\u00cc"+ + "\n\21\3\21\3\21\3\21\5\21\u00d1\n\21\3\22\3\22\3\22\3\23\3\23\3\23\3\23"+ + "\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u00e6"+ + "\n\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26"+ + "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u00fc\n\26\3\27\3\27\5\27\u0100"+ + "\n\27\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u0108\n\30\3\31\3\31\3\31\3\32"+ + "\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34"+ + "\3\34\5\34\u011d\n\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\7\35"+ + "\u0128\n\35\f\35\16\35\u012b\13\35\3\35\3\35\5\35\u012f\n\35\3\36\3\36"+ + "\3\36\5\36\u0134\n\36\3\37\3\37\3 \3 \3 \5 \u013b\n \3!\3!\3!\3!\3!\3"+ + "!\7!\u0143\n!\f!\16!\u0146\13!\3!\3!\3\"\3\"\3\"\5\"\u014d\n\"\3\"\3\""+ + "\7\"\u0151\n\"\f\"\16\"\u0154\13\"\3\"\3\"\7\"\u0158\n\"\f\"\16\"\u015b"+ + "\13\"\3\"\5\"\u015e\n\"\3\"\5\"\u0161\n\"\3#\3#\3$\3$\3$\3$\3%\3%\5%\u016b"+ + "\n%\3%\3%\3%\5%\u0170\n%\3%\3%\5%\u0174\n%\3%\3%\3%\5%\u0179\n%\3%\3%"+ + "\3%\5%\u017e\n%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u018b\n%\5%\u018d"+ + "\n%\3%\3%\3%\3%\5%\u0193\n%\5%\u0195\n%\3%\3%\3%\3%\3%\5%\u019c\n%\5%"+ + "\u019e\n%\3%\3%\3%\3%\5%\u01a4\n%\5%\u01a6\n%\3%\5%\u01a9\n%\3%\3%\3%"+ + "\3%\3%\3%\3%\3%\3%\3%\5%\u01b5\n%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%"+ + "\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%"+ + "\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\7%\u01ed\n%"+ + "\f%\16%\u01f0\13%\3&\3&\3&\5&\u01f5\n&\3&\3&\3&\3&\5&\u01fb\n&\7&\u01fd"+ + "\n&\f&\16&\u0200\13&\3\'\3\'\3\'\3\'\2\3H(\2\4\6\b\n\f\16\20\22\24\26"+ + "\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJL\2\3\3\2<=\2\u0247\2N\3\2"+ + "\2\2\4_\3\2\2\2\6g\3\2\2\2\bu\3\2\2\2\nw\3\2\2\2\f|\3\2\2\2\16\u008b\3"+ + "\2\2\2\20\u0096\3\2\2\2\22\u0098\3\2\2\2\24\u009a\3\2\2\2\26\u00a4\3\2"+ + "\2\2\30\u00aa\3\2\2\2\32\u00ac\3\2\2\2\34\u00bb\3\2\2\2\36\u00c1\3\2\2"+ + "\2 \u00c9\3\2\2\2\"\u00d2\3\2\2\2$\u00d5\3\2\2\2&\u00e5\3\2\2\2(\u00e7"+ + "\3\2\2\2*\u00fb\3\2\2\2,\u00fd\3\2\2\2.\u0101\3\2\2\2\60\u0109\3\2\2\2"+ + "\62\u010c\3\2\2\2\64\u0112\3\2\2\2\66\u0119\3\2\2\28\u012e\3\2\2\2:\u0133"+ + "\3\2\2\2<\u0135\3\2\2\2>\u013a\3\2\2\2@\u013c\3\2\2\2B\u0149\3\2\2\2D"+ + "\u0162\3\2\2\2F\u0164\3\2\2\2H\u01b4\3\2\2\2J\u01f4\3\2\2\2L\u0201\3\2"+ + "\2\2NO\7\21\2\2OS\7\7\2\2PR\5\4\3\2QP\3\2\2\2RU\3\2\2\2SQ\3\2\2\2ST\3"+ + "\2\2\2TZ\3\2\2\2US\3\2\2\2VY\5\32\16\2WY\5\6\4\2XV\3\2\2\2XW\3\2\2\2Y"+ + "\\\3\2\2\2ZX\3\2\2\2Z[\3\2\2\2[]\3\2\2\2\\Z\3\2\2\2]^\7\b\2\2^\3\3\2\2"+ + "\2_`\7\27\2\2`a\7\30\2\2ad\7:\2\2bc\7/\2\2ce\7:\2\2db\3\2\2\2de\3\2\2"+ + "\2e\5\3\2\2\2fh\7\17\2\2gf\3\2\2\2gh\3\2\2\2hi\3\2\2\2ij\7\t\2\2jo\5\b"+ + "\5\2kl\7B\2\2ln\5\b\5\2mk\3\2\2\2nq\3\2\2\2om\3\2\2\2op\3\2\2\2p\7\3\2"+ + "\2\2qo\3\2\2\2rv\5\n\6\2sv\5\24\13\2tv\5\f\7\2ur\3\2\2\2us\3\2\2\2ut\3"+ + "\2\2\2v\t\3\2\2\2wz\7:\2\2xy\7!\2\2y{\5H%\2zx\3\2\2\2z{\3\2\2\2{\13\3"+ + "\2\2\2|}\7:\2\2}\177\7\5\2\2~\u0080\5\20\t\2\177~\3\2\2\2\177\u0080\3"+ + "\2\2\2\u0080\u0081\3\2\2\2\u0081\u0082\7\6\2\2\u0082\u0084\7\5\2\2\u0083"+ + "\u0085\5\22\n\2\u0084\u0083\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0086\3"+ + "\2\2\2\u0086\u0089\7\6\2\2\u0087\u0088\7!\2\2\u0088\u008a\5\16\b\2\u0089"+ + "\u0087\3\2\2\2\u0089\u008a\3\2\2\2\u008a\r\3\2\2\2\u008b\u008c\7\7\2\2"+ + "\u008c\u0091\5\26\f\2\u008d\u008e\7B\2\2\u008e\u0090\5\26\f\2\u008f\u008d"+ + "\3\2\2\2\u0090\u0093\3\2\2\2\u0091\u008f\3\2\2\2\u0091\u0092\3\2\2\2\u0092"+ + "\u0094\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0095\7\b\2\2\u0095\17\3\2\2"+ + "\2\u0096\u0097\5\30\r\2\u0097\21\3\2\2\2\u0098\u0099\5\30\r\2\u0099\23"+ + "\3\2\2\2\u009a\u009b\7:\2\2\u009b\u009d\7\5\2\2\u009c\u009e\5\30\r\2\u009d"+ + "\u009c\3\2\2\2\u009d\u009e\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a2\7\6"+ + "\2\2\u00a0\u00a1\7!\2\2\u00a1\u00a3\5\26\f\2\u00a2\u00a0\3\2\2\2\u00a2"+ + "\u00a3\3\2\2\2\u00a3\25\3\2\2\2\u00a4\u00a6\7\7\2\2\u00a5\u00a7\5J&\2"+ + "\u00a6\u00a5\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8\3\2\2\2\u00a8\u00a9"+ + "\7\b\2\2\u00a9\27\3\2\2\2\u00aa\u00ab\5H%\2\u00ab\31\3\2\2\2\u00ac\u00ae"+ + "\7\20\2\2\u00ad\u00af\7\t\2\2\u00ae\u00ad\3\2\2\2\u00ae\u00af\3\2\2\2"+ + "\u00af\u00b0\3\2\2\2\u00b0\u00b1\7:\2\2\u00b1\u00b2\5\34\17\2\u00b2\u00b6"+ + "\7\7\2\2\u00b3\u00b5\5&\24\2\u00b4\u00b3\3\2\2\2\u00b5\u00b8\3\2\2\2\u00b6"+ "\u00b4\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00b6\3\2"+ - "\2\2\u00b9\u00ba\7\b\2\2\u00ba\33\3\2\2\2\u00bb\u00c0\5\36\20\2\u00bc"+ - "\u00bd\7B\2\2\u00bd\u00bf\5\36\20\2\u00be\u00bc\3\2\2\2\u00bf\u00c2\3"+ - "\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\35\3\2\2\2\u00c2"+ - "\u00c0\3\2\2\2\u00c3\u00c5\7\t\2\2\u00c4\u00c6\7\60\2\2\u00c5\u00c4\3"+ - "\2\2\2\u00c5\u00c6\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00ca\7:\2\2\u00c8"+ - "\u00cb\5 \21\2\u00c9\u00cb\5\"\22\2\u00ca\u00c8\3\2\2\2\u00ca\u00c9\3"+ - "\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\37\3\2\2\2\u00cc\u00cd\7\5\2\2\u00cd"+ - "\u00ce\7\6\2\2\u00ce!\3\2\2\2\u00cf\u00d0\7\5\2\2\u00d0\u00d1\7\6\2\2"+ - "\u00d1\u00d2\7\5\2\2\u00d2\u00d3\7\6\2\2\u00d3#\3\2\2\2\u00d4\u00e0\5"+ - "\6\4\2\u00d5\u00e0\5,\27\2\u00d6\u00e0\5.\30\2\u00d7\u00e0\5\60\31\2\u00d8"+ - "\u00e0\5\62\32\2\u00d9\u00e0\5<\37\2\u00da\u00e0\5*\26\2\u00db\u00e0\5"+ - "@!\2\u00dc\u00e0\5&\24\2\u00dd\u00e0\5(\25\2\u00de\u00e0\5D#\2\u00df\u00d4"+ - "\3\2\2\2\u00df\u00d5\3\2\2\2\u00df\u00d6\3\2\2\2\u00df\u00d7\3\2\2\2\u00df"+ - "\u00d8\3\2\2\2\u00df\u00d9\3\2\2\2\u00df\u00da\3\2\2\2\u00df\u00db\3\2"+ - "\2\2\u00df\u00dc\3\2\2\2\u00df\u00dd\3\2\2\2\u00df\u00de\3\2\2\2\u00e0"+ - "%\3\2\2\2\u00e1\u00e2\5D#\2\u00e2\u00e3\7!\2\2\u00e3\u00e4\5D#\2\u00e4"+ - "\'\3\2\2\2\u00e5\u00e6\5D#\2\u00e6\u00e7\7\61\2\2\u00e7\u00e8\5D#\2\u00e8"+ - "\u00f6\3\2\2\2\u00e9\u00ea\5D#\2\u00ea\u00eb\7\62\2\2\u00eb\u00ec\5D#"+ - "\2\u00ec\u00f6\3\2\2\2\u00ed\u00ee\5D#\2\u00ee\u00ef\7\63\2\2\u00ef\u00f0"+ - "\5D#\2\u00f0\u00f6\3\2\2\2\u00f1\u00f2\5D#\2\u00f2\u00f3\7\64\2\2\u00f3"+ - "\u00f4\5D#\2\u00f4\u00f6\3\2\2\2\u00f5\u00e5\3\2\2\2\u00f5\u00e9\3\2\2"+ - "\2\u00f5\u00ed\3\2\2\2\u00f5\u00f1\3\2\2\2\u00f6)\3\2\2\2\u00f7\u00f9"+ - "\7\26\2\2\u00f8\u00fa\5D#\2\u00f9\u00f8\3\2\2\2\u00f9\u00fa\3\2\2\2\u00fa"+ - "+\3\2\2\2\u00fb\u00fc\7\r\2\2\u00fc\u00fd\7\3\2\2\u00fd\u00fe\5D#\2\u00fe"+ - "\u00ff\7\4\2\2\u00ff\u0102\5\64\33\2\u0100\u0101\7\16\2\2\u0101\u0103"+ - "\5\64\33\2\u0102\u0100\3\2\2\2\u0102\u0103\3\2\2\2\u0103-\3\2\2\2\u0104"+ - "\u0105\7\13\2\2\u0105\u0106\7\3\2\2\u0106\u0107\5D#\2\u0107\u0108\7\4"+ - "\2\2\u0108\u0109\5\64\33\2\u0109/\3\2\2\2\u010a\u010b\7\n\2\2\u010b\u010c"+ - "\5\64\33\2\u010c\u010d\7\13\2\2\u010d\u010e\7\3\2\2\u010e\u010f\5D#\2"+ - "\u010f\u0110\7\4\2\2\u0110\61\3\2\2\2\u0111\u0112\7\f\2\2\u0112\u0114"+ - "\7\3\2\2\u0113\u0115\5\66\34\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2\2\2"+ - "\u0115\u0116\3\2\2\2\u0116\u0117\7C\2\2\u0117\u0118\58\35\2\u0118\u0119"+ - "\7C\2\2\u0119\u011a\5:\36\2\u011a\u011b\7\4\2\2\u011b\u011c\5\64\33\2"+ - "\u011c\63\3\2\2\2\u011d\u0121\7\7\2\2\u011e\u0120\5$\23\2\u011f\u011e"+ - "\3\2\2\2\u0120\u0123\3\2\2\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122"+ - "\u0124\3\2\2\2\u0123\u0121\3\2\2\2\u0124\u0127\7\b\2\2\u0125\u0127\5$"+ - "\23\2\u0126\u011d\3\2\2\2\u0126\u0125\3\2\2\2\u0127\65\3\2\2\2\u0128\u012c"+ - "\5&\24\2\u0129\u012c\5\6\4\2\u012a\u012c\7:\2\2\u012b\u0128\3\2\2\2\u012b"+ - "\u0129\3\2\2\2\u012b\u012a\3\2\2\2\u012c\67\3\2\2\2\u012d\u012e\5D#\2"+ - "\u012e9\3\2\2\2\u012f\u0133\5D#\2\u0130\u0133\5(\25\2\u0131\u0133\5&\24"+ - "\2\u0132\u012f\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0131\3\2\2\2\u0133;"+ - "\3\2\2\2\u0134\u0135\7\22\2\2\u0135\u0136\7\3\2\2\u0136\u0137\5D#\2\u0137"+ - "\u0138\7\4\2\2\u0138\u013c\7\7\2\2\u0139\u013b\5> \2\u013a\u0139\3\2\2"+ - "\2\u013b\u013e\3\2\2\2\u013c\u013a\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u013f"+ - "\3\2\2\2\u013e\u013c\3\2\2\2\u013f\u0140\7\b\2\2\u0140=\3\2\2\2\u0141"+ - "\u0144\7\23\2\2\u0142\u0145\7\24\2\2\u0143\u0145\5D#\2\u0144\u0142\3\2"+ - "\2\2\u0144\u0143\3\2\2\2\u0145\u0146\3\2\2\2\u0146\u0155\7D\2\2\u0147"+ - "\u0149\5$\23\2\u0148\u0147\3\2\2\2\u0149\u014c\3\2\2\2\u014a\u0148\3\2"+ - "\2\2\u014a\u014b\3\2\2\2\u014b\u0156\3\2\2\2\u014c\u014a\3\2\2\2\u014d"+ - "\u0151\7\7\2\2\u014e\u0150\5$\23\2\u014f\u014e\3\2\2\2\u0150\u0153\3\2"+ - "\2\2\u0151\u014f\3\2\2\2\u0151\u0152\3\2\2\2\u0152\u0154\3\2\2\2\u0153"+ - "\u0151\3\2\2\2\u0154\u0156\7\b\2\2\u0155\u014a\3\2\2\2\u0155\u014d\3\2"+ - "\2\2\u0156\u0158\3\2\2\2\u0157\u0159\5@!\2\u0158\u0157\3\2\2\2\u0158\u0159"+ - "\3\2\2\2\u0159?\3\2\2\2\u015a\u015b\7\25\2\2\u015bA\3\2\2\2\u015c\u015d"+ - "\7\5\2\2\u015d\u015e\5D#\2\u015e\u015f\7\6\2\2\u015fC\3\2\2\2\u0160\u0162"+ - "\b#\1\2\u0161\u0163\5H%\2\u0162\u0161\3\2\2\2\u0162\u0163\3\2\2\2\u0163"+ - "\u0164\3\2\2\2\u0164\u0165\7:\2\2\u0165\u0167\7\3\2\2\u0166\u0168\5F$"+ - "\2\u0167\u0166\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u0169\3\2\2\2\u0169\u01ad"+ - "\7\4\2\2\u016a\u016c\5H%\2\u016b\u016a\3\2\2\2\u016b\u016c\3\2\2\2\u016c"+ - "\u016d\3\2\2\2\u016d\u016e\7:\2\2\u016e\u01ad\5B\"\2\u016f\u0171\5H%\2"+ - "\u0170\u016f\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0172\3\2\2\2\u0172\u0173"+ - "\7:\2\2\u0173\u0175\5B\"\2\u0174\u0176\5B\"\2\u0175\u0174\3\2\2\2\u0175"+ - "\u0176\3\2\2\2\u0176\u01ad\3\2\2\2\u0177\u0178\7\34\2\2\u0178\u01ad\5"+ - "D##\u0179\u017a\7\35\2\2\u017a\u01ad\5D#\"\u017b\u017c\7\31\2\2\u017c"+ - "\u01ad\5D#!\u017d\u017e\7.\2\2\u017e\u01ad\5D# \u017f\u0184\7:\2\2\u0180"+ - "\u0182\5B\"\2\u0181\u0183\5B\"\2\u0182\u0181\3\2\2\2\u0182\u0183\3\2\2"+ - "\2\u0183\u0185\3\2\2\2\u0184\u0180\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0186"+ - "\3\2\2\2\u0186\u01ad\7(\2\2\u0187\u018c\7:\2\2\u0188\u018a\5B\"\2\u0189"+ - "\u018b\5B\"\2\u018a\u0189\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u018d\3\2"+ - "\2\2\u018c\u0188\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\3\2\2\2\u018e"+ - "\u01ad\7)\2\2\u018f\u0190\7(\2\2\u0190\u0195\7:\2\2\u0191\u0193\5B\"\2"+ - "\u0192\u0194\5B\"\2\u0193\u0192\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0196"+ - "\3\2\2\2\u0195\u0191\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u01ad\3\2\2\2\u0197"+ - "\u0198\7)\2\2\u0198\u019d\7:\2\2\u0199\u019b\5B\"\2\u019a\u019c\5B\"\2"+ - "\u019b\u019a\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019e\3\2\2\2\u019d\u0199"+ - "\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u01ad\3\2\2\2\u019f\u01a1\5H%\2\u01a0"+ - "\u019f\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01ad\7:"+ - "\2\2\u01a3\u01ad\t\2\2\2\u01a4\u01ad\7;\2\2\u01a5\u01ad\7\65\2\2\u01a6"+ - "\u01ad\78\2\2\u01a7\u01ad\79\2\2\u01a8\u01a9\7\3\2\2\u01a9\u01aa\5D#\2"+ - "\u01aa\u01ab\7\4\2\2\u01ab\u01ad\3\2\2\2\u01ac\u0160\3\2\2\2\u01ac\u016b"+ - "\3\2\2\2\u01ac\u0170\3\2\2\2\u01ac\u0177\3\2\2\2\u01ac\u0179\3\2\2\2\u01ac"+ - "\u017b\3\2\2\2\u01ac\u017d\3\2\2\2\u01ac\u017f\3\2\2\2\u01ac\u0187\3\2"+ - "\2\2\u01ac\u018f\3\2\2\2\u01ac\u0197\3\2\2\2\u01ac\u01a0\3\2\2\2\u01ac"+ - "\u01a3\3\2\2\2\u01ac\u01a4\3\2\2\2\u01ac\u01a5\3\2\2\2\u01ac\u01a6\3\2"+ - "\2\2\u01ac\u01a7\3\2\2\2\u01ac\u01a8\3\2\2\2\u01ad\u01e6\3\2\2\2\u01ae"+ - "\u01af\f\33\2\2\u01af\u01b0\7\36\2\2\u01b0\u01e5\5D#\34\u01b1\u01b2\f"+ - "\32\2\2\u01b2\u01b3\7\37\2\2\u01b3\u01e5\5D#\33\u01b4\u01b5\f\31\2\2\u01b5"+ - "\u01b6\7 \2\2\u01b6\u01e5\5D#\32\u01b7\u01b8\f\30\2\2\u01b8\u01b9\7\35"+ - "\2\2\u01b9\u01e5\5D#\31\u01ba\u01bb\f\27\2\2\u01bb\u01bc\7\34\2\2\u01bc"+ - "\u01e5\5D#\30\u01bd\u01be\f\26\2\2\u01be\u01bf\7\"\2\2\u01bf\u01e5\5D"+ - "#\27\u01c0\u01c1\f\25\2\2\u01c1\u01c2\7#\2\2\u01c2\u01e5\5D#\26\u01c3"+ - "\u01c4\f\24\2\2\u01c4\u01c5\7$\2\2\u01c5\u01e5\5D#\25\u01c6\u01c7\f\23"+ - "\2\2\u01c7\u01c8\7%\2\2\u01c8\u01e5\5D#\24\u01c9\u01ca\f\22\2\2\u01ca"+ - "\u01cb\7&\2\2\u01cb\u01e5\5D#\23\u01cc\u01cd\f\21\2\2\u01cd\u01ce\7\'"+ - "\2\2\u01ce\u01e5\5D#\22\u01cf\u01d0\f\20\2\2\u01d0\u01d1\7\32\2\2\u01d1"+ - "\u01e5\5D#\21\u01d2\u01d3\f\17\2\2\u01d3\u01d4\7\33\2\2\u01d4\u01e5\5"+ - "D#\20\u01d5\u01d6\f\16\2\2\u01d6\u01d7\7,\2\2\u01d7\u01e5\5D#\17\u01d8"+ - "\u01d9\f\r\2\2\u01d9\u01da\7*\2\2\u01da\u01e5\5D#\16\u01db\u01dc\f\f\2"+ - "\2\u01dc\u01dd\7+\2\2\u01dd\u01e5\5D#\r\u01de\u01df\f\13\2\2\u01df\u01e0"+ - "\7\60\2\2\u01e0\u01e5\5D#\f\u01e1\u01e2\f\n\2\2\u01e2\u01e3\7-\2\2\u01e3"+ - "\u01e5\5D#\13\u01e4\u01ae\3\2\2\2\u01e4\u01b1\3\2\2\2\u01e4\u01b4\3\2"+ - "\2\2\u01e4\u01b7\3\2\2\2\u01e4\u01ba\3\2\2\2\u01e4\u01bd\3\2\2\2\u01e4"+ - "\u01c0\3\2\2\2\u01e4\u01c3\3\2\2\2\u01e4\u01c6\3\2\2\2\u01e4\u01c9\3\2"+ - "\2\2\u01e4\u01cc\3\2\2\2\u01e4\u01cf\3\2\2\2\u01e4\u01d2\3\2\2\2\u01e4"+ - "\u01d5\3\2\2\2\u01e4\u01d8\3\2\2\2\u01e4\u01db\3\2\2\2\u01e4\u01de\3\2"+ - "\2\2\u01e4\u01e1\3\2\2\2\u01e5\u01e8\3\2\2\2\u01e6\u01e4\3\2\2\2\u01e6"+ - "\u01e7\3\2\2\2\u01e7E\3\2\2\2\u01e8\u01e6\3\2\2\2\u01e9\u01ed\5D#\2\u01ea"+ - "\u01ed\5(\25\2\u01eb\u01ed\5&\24\2\u01ec\u01e9\3\2\2\2\u01ec\u01ea\3\2"+ - "\2\2\u01ec\u01eb\3\2\2\2\u01ed\u01f6\3\2\2\2\u01ee\u01f2\7B\2\2\u01ef"+ - "\u01f3\5D#\2\u01f0\u01f3\5(\25\2\u01f1\u01f3\5&\24\2\u01f2\u01ef\3\2\2"+ - "\2\u01f2\u01f0\3\2\2\2\u01f2\u01f1\3\2\2\2\u01f3\u01f5\3\2\2\2\u01f4\u01ee"+ - "\3\2\2\2\u01f5\u01f8\3\2\2\2\u01f6\u01f4\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7"+ - "G\3\2\2\2\u01f8\u01f6\3\2\2\2\u01f9\u01fa\7:\2\2\u01fa\u01fb\7A\2\2\u01fb"+ - "I\3\2\2\2:OTV`ckqv{\u0080\u0085\u008d\u0099\u009e\u00a2\u00aa\u00af\u00b6"+ - "\u00c0\u00c5\u00ca\u00df\u00f5\u00f9\u0102\u0114\u0121\u0126\u012b\u0132"+ - "\u013c\u0144\u014a\u0151\u0155\u0158\u0162\u0167\u016b\u0170\u0175\u0182"+ - "\u0184\u018a\u018c\u0193\u0195\u019b\u019d\u01a0\u01ac\u01e4\u01e6\u01ec"+ - "\u01f2\u01f6"; + "\2\2\u00b9\u00ba\7\b\2\2\u00ba\33\3\2\2\2\u00bb\u00bd\7\3\2\2\u00bc\u00be"+ + "\5\36\20\2\u00bd\u00bc\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00bf\3\2\2\2"+ + "\u00bf\u00c0\7\4\2\2\u00c0\35\3\2\2\2\u00c1\u00c6\5 \21\2\u00c2\u00c3"+ + "\7B\2\2\u00c3\u00c5\5 \21\2\u00c4\u00c2\3\2\2\2\u00c5\u00c8\3\2\2\2\u00c6"+ + "\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\37\3\2\2\2\u00c8\u00c6\3\2\2"+ + "\2\u00c9\u00cb\7\t\2\2\u00ca\u00cc\7\60\2\2\u00cb\u00ca\3\2\2\2\u00cb"+ + "\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00d0\7:\2\2\u00ce\u00d1\5\""+ + "\22\2\u00cf\u00d1\5$\23\2\u00d0\u00ce\3\2\2\2\u00d0\u00cf\3\2\2\2\u00d0"+ + "\u00d1\3\2\2\2\u00d1!\3\2\2\2\u00d2\u00d3\7\5\2\2\u00d3\u00d4\7\6\2\2"+ + "\u00d4#\3\2\2\2\u00d5\u00d6\7\5\2\2\u00d6\u00d7\7\6\2\2\u00d7\u00d8\7"+ + "\5\2\2\u00d8\u00d9\7\6\2\2\u00d9%\3\2\2\2\u00da\u00e6\5\6\4\2\u00db\u00e6"+ + "\5.\30\2\u00dc\u00e6\5\62\32\2\u00dd\u00e6\5\64\33\2\u00de\u00e6\5\66"+ + "\34\2\u00df\u00e6\5@!\2\u00e0\u00e6\5,\27\2\u00e1\u00e6\5D#\2\u00e2\u00e6"+ + "\5(\25\2\u00e3\u00e6\5*\26\2\u00e4\u00e6\5H%\2\u00e5\u00da\3\2\2\2\u00e5"+ + "\u00db\3\2\2\2\u00e5\u00dc\3\2\2\2\u00e5\u00dd\3\2\2\2\u00e5\u00de\3\2"+ + "\2\2\u00e5\u00df\3\2\2\2\u00e5\u00e0\3\2\2\2\u00e5\u00e1\3\2\2\2\u00e5"+ + "\u00e2\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5\u00e4\3\2\2\2\u00e6\'\3\2\2\2"+ + "\u00e7\u00e8\5H%\2\u00e8\u00e9\7!\2\2\u00e9\u00ea\5H%\2\u00ea)\3\2\2\2"+ + "\u00eb\u00ec\5H%\2\u00ec\u00ed\7\61\2\2\u00ed\u00ee\5H%\2\u00ee\u00fc"+ + "\3\2\2\2\u00ef\u00f0\5H%\2\u00f0\u00f1\7\62\2\2\u00f1\u00f2\5H%\2\u00f2"+ + "\u00fc\3\2\2\2\u00f3\u00f4\5H%\2\u00f4\u00f5\7\63\2\2\u00f5\u00f6\5H%"+ + "\2\u00f6\u00fc\3\2\2\2\u00f7\u00f8\5H%\2\u00f8\u00f9\7\64\2\2\u00f9\u00fa"+ + "\5H%\2\u00fa\u00fc\3\2\2\2\u00fb\u00eb\3\2\2\2\u00fb\u00ef\3\2\2\2\u00fb"+ + "\u00f3\3\2\2\2\u00fb\u00f7\3\2\2\2\u00fc+\3\2\2\2\u00fd\u00ff\7\26\2\2"+ + "\u00fe\u0100\5H%\2\u00ff\u00fe\3\2\2\2\u00ff\u0100\3\2\2\2\u0100-\3\2"+ + "\2\2\u0101\u0102\7\r\2\2\u0102\u0103\7\3\2\2\u0103\u0104\5H%\2\u0104\u0105"+ + "\7\4\2\2\u0105\u0107\58\35\2\u0106\u0108\5\60\31\2\u0107\u0106\3\2\2\2"+ + "\u0107\u0108\3\2\2\2\u0108/\3\2\2\2\u0109\u010a\7\16\2\2\u010a\u010b\5"+ + "8\35\2\u010b\61\3\2\2\2\u010c\u010d\7\13\2\2\u010d\u010e\7\3\2\2\u010e"+ + "\u010f\5H%\2\u010f\u0110\7\4\2\2\u0110\u0111\58\35\2\u0111\63\3\2\2\2"+ + "\u0112\u0113\7\n\2\2\u0113\u0114\58\35\2\u0114\u0115\7\13\2\2\u0115\u0116"+ + "\7\3\2\2\u0116\u0117\5H%\2\u0117\u0118\7\4\2\2\u0118\65\3\2\2\2\u0119"+ + "\u011a\7\f\2\2\u011a\u011c\7\3\2\2\u011b\u011d\5:\36\2\u011c\u011b\3\2"+ + "\2\2\u011c\u011d\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011f\7C\2\2\u011f"+ + "\u0120\5<\37\2\u0120\u0121\7C\2\2\u0121\u0122\5> \2\u0122\u0123\7\4\2"+ + "\2\u0123\u0124\58\35\2\u0124\67\3\2\2\2\u0125\u0129\7\7\2\2\u0126\u0128"+ + "\5&\24\2\u0127\u0126\3\2\2\2\u0128\u012b\3\2\2\2\u0129\u0127\3\2\2\2\u0129"+ + "\u012a\3\2\2\2\u012a\u012c\3\2\2\2\u012b\u0129\3\2\2\2\u012c\u012f\7\b"+ + "\2\2\u012d\u012f\5&\24\2\u012e\u0125\3\2\2\2\u012e\u012d\3\2\2\2\u012f"+ + "9\3\2\2\2\u0130\u0134\5(\25\2\u0131\u0134\5\6\4\2\u0132\u0134\7:\2\2\u0133"+ + "\u0130\3\2\2\2\u0133\u0131\3\2\2\2\u0133\u0132\3\2\2\2\u0134;\3\2\2\2"+ + "\u0135\u0136\5H%\2\u0136=\3\2\2\2\u0137\u013b\5H%\2\u0138\u013b\5*\26"+ + "\2\u0139\u013b\5(\25\2\u013a\u0137\3\2\2\2\u013a\u0138\3\2\2\2\u013a\u0139"+ + "\3\2\2\2\u013b?\3\2\2\2\u013c\u013d\7\22\2\2\u013d\u013e\7\3\2\2\u013e"+ + "\u013f\5H%\2\u013f\u0140\7\4\2\2\u0140\u0144\7\7\2\2\u0141\u0143\5B\""+ + "\2\u0142\u0141\3\2\2\2\u0143\u0146\3\2\2\2\u0144\u0142\3\2\2\2\u0144\u0145"+ + "\3\2\2\2\u0145\u0147\3\2\2\2\u0146\u0144\3\2\2\2\u0147\u0148\7\b\2\2\u0148"+ + "A\3\2\2\2\u0149\u014c\7\23\2\2\u014a\u014d\7\24\2\2\u014b\u014d\5H%\2"+ + "\u014c\u014a\3\2\2\2\u014c\u014b\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u015d"+ + "\7D\2\2\u014f\u0151\5&\24\2\u0150\u014f\3\2\2\2\u0151\u0154\3\2\2\2\u0152"+ + "\u0150\3\2\2\2\u0152\u0153\3\2\2\2\u0153\u015e\3\2\2\2\u0154\u0152\3\2"+ + "\2\2\u0155\u0159\7\7\2\2\u0156\u0158\5&\24\2\u0157\u0156\3\2\2\2\u0158"+ + "\u015b\3\2\2\2\u0159\u0157\3\2\2\2\u0159\u015a\3\2\2\2\u015a\u015c\3\2"+ + "\2\2\u015b\u0159\3\2\2\2\u015c\u015e\7\b\2\2\u015d\u0152\3\2\2\2\u015d"+ + "\u0155\3\2\2\2\u015e\u0160\3\2\2\2\u015f\u0161\5D#\2\u0160\u015f\3\2\2"+ + "\2\u0160\u0161\3\2\2\2\u0161C\3\2\2\2\u0162\u0163\7\25\2\2\u0163E\3\2"+ + "\2\2\u0164\u0165\7\5\2\2\u0165\u0166\5H%\2\u0166\u0167\7\6\2\2\u0167G"+ + "\3\2\2\2\u0168\u016a\b%\1\2\u0169\u016b\5L\'\2\u016a\u0169\3\2\2\2\u016a"+ + "\u016b\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u016d\7:\2\2\u016d\u016f\7\3"+ + "\2\2\u016e\u0170\5J&\2\u016f\u016e\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0171"+ + "\3\2\2\2\u0171\u01b5\7\4\2\2\u0172\u0174\5L\'\2\u0173\u0172\3\2\2\2\u0173"+ + "\u0174\3\2\2\2\u0174\u0175\3\2\2\2\u0175\u0176\7:\2\2\u0176\u01b5\5F$"+ + "\2\u0177\u0179\5L\'\2\u0178\u0177\3\2\2\2\u0178\u0179\3\2\2\2\u0179\u017a"+ + "\3\2\2\2\u017a\u017b\7:\2\2\u017b\u017d\5F$\2\u017c\u017e\5F$\2\u017d"+ + "\u017c\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u01b5\3\2\2\2\u017f\u0180\7\34"+ + "\2\2\u0180\u01b5\5H%#\u0181\u0182\7\35\2\2\u0182\u01b5\5H%\"\u0183\u0184"+ + "\7\31\2\2\u0184\u01b5\5H%!\u0185\u0186\7.\2\2\u0186\u01b5\5H% \u0187\u018c"+ + "\7:\2\2\u0188\u018a\5F$\2\u0189\u018b\5F$\2\u018a\u0189\3\2\2\2\u018a"+ + "\u018b\3\2\2\2\u018b\u018d\3\2\2\2\u018c\u0188\3\2\2\2\u018c\u018d\3\2"+ + "\2\2\u018d\u018e\3\2\2\2\u018e\u01b5\7(\2\2\u018f\u0194\7:\2\2\u0190\u0192"+ + "\5F$\2\u0191\u0193\5F$\2\u0192\u0191\3\2\2\2\u0192\u0193\3\2\2\2\u0193"+ + "\u0195\3\2\2\2\u0194\u0190\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0196\3\2"+ + "\2\2\u0196\u01b5\7)\2\2\u0197\u0198\7(\2\2\u0198\u019d\7:\2\2\u0199\u019b"+ + "\5F$\2\u019a\u019c\5F$\2\u019b\u019a\3\2\2\2\u019b\u019c\3\2\2\2\u019c"+ + "\u019e\3\2\2\2\u019d\u0199\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u01b5\3\2"+ + "\2\2\u019f\u01a0\7)\2\2\u01a0\u01a5\7:\2\2\u01a1\u01a3\5F$\2\u01a2\u01a4"+ + "\5F$\2\u01a3\u01a2\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a6\3\2\2\2\u01a5"+ + "\u01a1\3\2\2\2\u01a5\u01a6\3\2\2\2\u01a6\u01b5\3\2\2\2\u01a7\u01a9\5L"+ + "\'\2\u01a8\u01a7\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa"+ + "\u01b5\7:\2\2\u01ab\u01b5\t\2\2\2\u01ac\u01b5\7;\2\2\u01ad\u01b5\7\65"+ + "\2\2\u01ae\u01b5\78\2\2\u01af\u01b5\79\2\2\u01b0\u01b1\7\3\2\2\u01b1\u01b2"+ + "\5H%\2\u01b2\u01b3\7\4\2\2\u01b3\u01b5\3\2\2\2\u01b4\u0168\3\2\2\2\u01b4"+ + "\u0173\3\2\2\2\u01b4\u0178\3\2\2\2\u01b4\u017f\3\2\2\2\u01b4\u0181\3\2"+ + "\2\2\u01b4\u0183\3\2\2\2\u01b4\u0185\3\2\2\2\u01b4\u0187\3\2\2\2\u01b4"+ + "\u018f\3\2\2\2\u01b4\u0197\3\2\2\2\u01b4\u019f\3\2\2\2\u01b4\u01a8\3\2"+ + "\2\2\u01b4\u01ab\3\2\2\2\u01b4\u01ac\3\2\2\2\u01b4\u01ad\3\2\2\2\u01b4"+ + "\u01ae\3\2\2\2\u01b4\u01af\3\2\2\2\u01b4\u01b0\3\2\2\2\u01b5\u01ee\3\2"+ + "\2\2\u01b6\u01b7\f\33\2\2\u01b7\u01b8\7\36\2\2\u01b8\u01ed\5H%\34\u01b9"+ + "\u01ba\f\32\2\2\u01ba\u01bb\7\37\2\2\u01bb\u01ed\5H%\33\u01bc\u01bd\f"+ + "\31\2\2\u01bd\u01be\7 \2\2\u01be\u01ed\5H%\32\u01bf\u01c0\f\30\2\2\u01c0"+ + "\u01c1\7\35\2\2\u01c1\u01ed\5H%\31\u01c2\u01c3\f\27\2\2\u01c3\u01c4\7"+ + "\34\2\2\u01c4\u01ed\5H%\30\u01c5\u01c6\f\26\2\2\u01c6\u01c7\7\"\2\2\u01c7"+ + "\u01ed\5H%\27\u01c8\u01c9\f\25\2\2\u01c9\u01ca\7#\2\2\u01ca\u01ed\5H%"+ + "\26\u01cb\u01cc\f\24\2\2\u01cc\u01cd\7$\2\2\u01cd\u01ed\5H%\25\u01ce\u01cf"+ + "\f\23\2\2\u01cf\u01d0\7%\2\2\u01d0\u01ed\5H%\24\u01d1\u01d2\f\22\2\2\u01d2"+ + "\u01d3\7&\2\2\u01d3\u01ed\5H%\23\u01d4\u01d5\f\21\2\2\u01d5\u01d6\7\'"+ + "\2\2\u01d6\u01ed\5H%\22\u01d7\u01d8\f\20\2\2\u01d8\u01d9\7\32\2\2\u01d9"+ + "\u01ed\5H%\21\u01da\u01db\f\17\2\2\u01db\u01dc\7\33\2\2\u01dc\u01ed\5"+ + "H%\20\u01dd\u01de\f\16\2\2\u01de\u01df\7,\2\2\u01df\u01ed\5H%\17\u01e0"+ + "\u01e1\f\r\2\2\u01e1\u01e2\7*\2\2\u01e2\u01ed\5H%\16\u01e3\u01e4\f\f\2"+ + "\2\u01e4\u01e5\7+\2\2\u01e5\u01ed\5H%\r\u01e6\u01e7\f\13\2\2\u01e7\u01e8"+ + "\7\60\2\2\u01e8\u01ed\5H%\f\u01e9\u01ea\f\n\2\2\u01ea\u01eb\7-\2\2\u01eb"+ + "\u01ed\5H%\13\u01ec\u01b6\3\2\2\2\u01ec\u01b9\3\2\2\2\u01ec\u01bc\3\2"+ + "\2\2\u01ec\u01bf\3\2\2\2\u01ec\u01c2\3\2\2\2\u01ec\u01c5\3\2\2\2\u01ec"+ + "\u01c8\3\2\2\2\u01ec\u01cb\3\2\2\2\u01ec\u01ce\3\2\2\2\u01ec\u01d1\3\2"+ + "\2\2\u01ec\u01d4\3\2\2\2\u01ec\u01d7\3\2\2\2\u01ec\u01da\3\2\2\2\u01ec"+ + "\u01dd\3\2\2\2\u01ec\u01e0\3\2\2\2\u01ec\u01e3\3\2\2\2\u01ec\u01e6\3\2"+ + "\2\2\u01ec\u01e9\3\2\2\2\u01ed\u01f0\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ee"+ + "\u01ef\3\2\2\2\u01efI\3\2\2\2\u01f0\u01ee\3\2\2\2\u01f1\u01f5\5H%\2\u01f2"+ + "\u01f5\5*\26\2\u01f3\u01f5\5(\25\2\u01f4\u01f1\3\2\2\2\u01f4\u01f2\3\2"+ + "\2\2\u01f4\u01f3\3\2\2\2\u01f5\u01fe\3\2\2\2\u01f6\u01fa\7B\2\2\u01f7"+ + "\u01fb\5H%\2\u01f8\u01fb\5*\26\2\u01f9\u01fb\5(\25\2\u01fa\u01f7\3\2\2"+ + "\2\u01fa\u01f8\3\2\2\2\u01fa\u01f9\3\2\2\2\u01fb\u01fd\3\2\2\2\u01fc\u01f6"+ + "\3\2\2\2\u01fd\u0200\3\2\2\2\u01fe\u01fc\3\2\2\2\u01fe\u01ff\3\2\2\2\u01ff"+ + "K\3\2\2\2\u0200\u01fe\3\2\2\2\u0201\u0202\7:\2\2\u0202\u0203\7A\2\2\u0203"+ + "M\3\2\2\2:SXZdgouz\177\u0084\u0089\u0091\u009d\u00a2\u00a6\u00ae\u00b6"+ + "\u00bd\u00c6\u00cb\u00d0\u00e5\u00fb\u00ff\u0107\u011c\u0129\u012e\u0133"+ + "\u013a\u0144\u014c\u0152\u0159\u015d\u0160\u016a\u016f\u0173\u0178\u017d"+ + "\u018a\u018c\u0192\u0194\u019b\u019d\u01a3\u01a5\u01a8\u01b4\u01ec\u01ee"+ + "\u01f4\u01fa\u01fe"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolVisitor.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolVisitor.java index e5db4f9cc..7a5255331 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolVisitor.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolVisitor.java @@ -88,6 +88,12 @@ public interface PortugolVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDeclaracaoFuncao(PortugolParser.DeclaracaoFuncaoContext ctx); + /** + * Visit a parse tree produced by {@link PortugolParser#parametroFuncao}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitParametroFuncao(PortugolParser.ParametroFuncaoContext ctx); /** * Visit a parse tree produced by {@link PortugolParser#listaParametros}. * @param ctx the parse tree @@ -164,6 +170,12 @@ public interface PortugolVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitSe(PortugolParser.SeContext ctx); + /** + * Visit a parse tree produced by {@link PortugolParser#senao}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSenao(PortugolParser.SenaoContext ctx); /** * Visit a parse tree produced by {@link PortugolParser#enquanto}. * @param ctx the parse tree diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroLinhaPuladaEmString.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroLinhaPuladaEmString.java index c7eb3a4b7..7ad91fdb5 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroLinhaPuladaEmString.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroLinhaPuladaEmString.java @@ -20,7 +20,7 @@ protected String construirMensagem() { StringBuilder sb = new StringBuilder(); - sb.append("Você pulou uma linha ao escrever uma cadeia. Cadeias apenas podem ser escritas em na mesma linha"); + sb.append("Você pulou uma linha ao escrever uma cadeia. Cadeias apenas podem ser escritas em uma mesma linha"); return sb.toString(); } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParametrosNaoTipados.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParametrosNaoTipados.java new file mode 100644 index 000000000..5dc115943 --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParametrosNaoTipados.java @@ -0,0 +1,28 @@ +package br.univali.portugol.nucleo.analise.sintatica.erros; + +import br.univali.portugol.nucleo.mensagens.ErroSemiSintatico; + +/** + * + * @author Luiz Fernando Noschang + */ +public final class ErroParametrosNaoTipados extends ErroSemiSintatico +{ + + + public ErroParametrosNaoTipados(int linha, int coluna, String codigofonte) + { + super(linha, coluna, codigofonte); + } + + @Override + protected String construirMensagem() + { + StringBuilder sb = new StringBuilder(); + + sb.append("Os parametros da função, não estão tipados.\n"); + sb.append("Adicione tipos para cada um dos parametros utilizados ex: funcao nome(inteiro idade, cadeia sobrenome)"); + + return sb.toString(); + } +} diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParsingNaoTratado.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParsingNaoTratado.java index 315f77819..28729f319 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParsingNaoTratado.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroParsingNaoTratado.java @@ -45,6 +45,6 @@ public ErroParsingNaoTratado(RecognitionException erro, String mensagemPadrao, S @Override protected String construirMensagem() { - return this.mensagemPadrao + " - Contexto: " + contexto + " - Classe: " + erro.getClass().getSimpleName(); + return this.mensagemPadrao; } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroRetornoVetorMatriz.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroRetornoVetorMatriz.java new file mode 100644 index 000000000..5001d1535 --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroRetornoVetorMatriz.java @@ -0,0 +1,27 @@ +package br.univali.portugol.nucleo.analise.sintatica.erros; + +import br.univali.portugol.nucleo.mensagens.ErroSemiSintatico; + +/** + * + * @author Luiz Fernando Noschang + */ +public final class ErroRetornoVetorMatriz extends ErroSemiSintatico +{ + + + public ErroRetornoVetorMatriz(int linha, int coluna, String codigofonte) + { + super(linha, coluna, codigofonte); + } + + @Override + protected String construirMensagem() + { + StringBuilder sb = new StringBuilder(); + + sb.append("Não é possível retornar vetores ou matrizes por funções.\n\n"); + + return sb.toString(); + } +} diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroSenaoInesperado.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroSenaoInesperado.java new file mode 100644 index 000000000..f1f86953f --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErroSenaoInesperado.java @@ -0,0 +1,34 @@ +package br.univali.portugol.nucleo.analise.sintatica.erros; + +import br.univali.portugol.nucleo.mensagens.ErroSemiSintatico; + +/** + * + * @author Luiz Fernando Noschang + */ +public final class ErroSenaoInesperado extends ErroSemiSintatico +{ + + + public ErroSenaoInesperado(int linha, int coluna, String codigofonte) + { + super(linha, coluna, codigofonte); + } + + @Override + protected String construirMensagem() + { + StringBuilder sb = new StringBuilder(); + + sb.append("O token 'senao' não faz sentido neste local. O comando 'senao' deve ser utilizado com o comando 'se' da seguinte maneira:\n"); + sb.append("se(condicao){\n\n"); + sb.append("}senao{\n\n"); + sb.append("}\n\n"); + sb.append("ou então: \n\n"); + sb.append("se(condicao){\n\n"); + sb.append("}senao se(condicao2){\n\n"); + sb.append("}\n\n"); + + return sb.toString(); + } +} diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/tradutores/TradutorMismatchedTokenException.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/tradutores/TradutorMismatchedTokenException.java index 3b3c2edd4..3a38cd9c8 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/tradutores/TradutorMismatchedTokenException.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/tradutores/TradutorMismatchedTokenException.java @@ -8,13 +8,17 @@ import br.univali.portugol.nucleo.analise.sintatica.erros.ErroEscopo; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroExpressaoEsperada; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroExpressaoIncompleta; +import br.univali.portugol.nucleo.analise.sintatica.erros.ErroExpressaoInesperada; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroExpressoesForaEscopoPrograma; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroFaltaDoisPontos; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroNomeSimboloEstaFaltando; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroPalavraReservadaEstaFaltando; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroParaEsperaCondicao; +import br.univali.portugol.nucleo.analise.sintatica.erros.ErroParametrosNaoTipados; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroParentesis; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroParsingNaoTratado; +import br.univali.portugol.nucleo.analise.sintatica.erros.ErroRetornoVetorMatriz; +import br.univali.portugol.nucleo.analise.sintatica.erros.ErroSenaoInesperado; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroTipoDeDadoEstaFaltando; import br.univali.portugol.nucleo.analise.sintatica.erros.ErroTokenFaltando; import br.univali.portugol.nucleo.mensagens.ErroSintatico; @@ -46,25 +50,45 @@ public final class TradutorMismatchedTokenException { public ErroSintatico traduzirErroParsing(RecognitionException erro, String mensagemPadrao, String codigoFonte) { - - int linha = ((ParserRuleContext)(erro.getCtx())).start.getLine(); - int coluna = ((ParserRuleContext)(erro.getCtx())).start.getCharPositionInLine(); + + int linha = TradutorUtils.getToken(erro).getLine(); + int coluna = TradutorUtils.getToken(erro).getCharPositionInLine(); ContextSet contextos = new ContextSet(erro); List tokensEsperados = getTokensEsperados(erro); String contextoAtual = contextos.getContextoAtual(); - if(tokensEsperados.size()>1) - { - PortugolLexer lexer = new PortugolLexer(CharStreams.fromString(codigoFonte)); - for (Token token = lexer.nextToken(); token.getType() != Token.EOF; token = lexer.nextToken()) + String token = TradutorUtils.getToken(erro).getText(); + +// if(tokensEsperados.size()>1) +// { +// PortugolLexer lexer = new PortugolLexer(CharStreams.fromString(codigoFonte)); +// for (Token token = lexer.nextToken(); token.getType() != Token.EOF; token = lexer.nextToken()) +// { +//// if(token.getType() == PortugolLexer.INVALID_ESCAPE) +//// { +//// return new ErroEscapeUnico(token.getLine(), token.getCharPositionInLine(), "\\", token.getText()); +//// } +// } +// } + + if(erro.getMessage().contains("Remove-lo pode solucionar o problema")) + { + if(token.equals("senao")) { -// if(token.getType() == PortugolLexer.INVALID_ESCAPE) -// { -// return new ErroEscapeUnico(token.getLine(), token.getCharPositionInLine(), "\\", token.getText()); -// } + return new ErroSenaoInesperado(linha, coluna, token); } + if(contextoAtual.equals("parametroFuncao")) + { + return new ErroParametrosNaoTipados(linha, coluna, token); + } + return new ErroExpressaoInesperada(linha, coluna, token); + } + + if(contextoAtual.equals("parametroFuncao")) + { + return new ErroParametrosNaoTipados(linha, coluna, TradutorUtils.getToken(erro).getText()); } if (contextoAtual.equals("expressao") ) { @@ -93,6 +117,10 @@ public ErroSintatico traduzirErroParsing(RecognitionException erro, String mensa // função, variável ou parâmetro sem nome if (contextoAtual.startsWith("declaracao") || contextoAtual.equals("parametro")) { + if(token.equals("[")) + { + return new ErroRetornoVetorMatriz(linha, coluna, contextoAtual); + } if (tokensEsperados.contains("ID")){ return new ErroNomeSimboloEstaFaltando(linha, coluna, contextoAtual); } @@ -111,13 +139,13 @@ public ErroSintatico traduzirErroParsing(RecognitionException erro, String mensa for (String tokenEsperado : tokensEsperados) { switch (tokenEsperado) { + case "TIPO": return new ErroTipoDeDadoEstaFaltando(linha, coluna); case "FECHA_CHAVES": return new ErroEscopo(linha, coluna, ErroEscopo.Tipo.FECHAMENTO, contextoAtual); case "ABRE_PARENTESES": return new ErroParentesis(linha, coluna, ErroParentesis.Tipo.ABERTURA); case "FECHA_PARENTESES": return new ErroParentesis(linha, coluna, ErroParentesis.Tipo.FECHAMENTO); case "DOISPONTOS": return new ErroFaltaDoisPontos(linha, coluna); case "PONTOVIRGULA": return new ErroTokenFaltando(linha, coluna, tokenEsperado); case "ENQUANTO": return new ErroPalavraReservadaEstaFaltando(linha, coluna, "enquanto"); - case "TIPO": return new ErroTipoDeDadoEstaFaltando(linha, coluna); case "PROGRAMA": return new ErroExpressoesForaEscopoPrograma(coluna, codigoFonte, ErroExpressoesForaEscopoPrograma.Local.ANTES); } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/asa/NoParametroFuncao.java b/core/src/main/java/br/univali/portugol/nucleo/asa/NoParametroFuncao.java new file mode 100644 index 000000000..3da59d7b3 --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/asa/NoParametroFuncao.java @@ -0,0 +1,35 @@ +package br.univali.portugol.nucleo.asa; + +import java.util.ArrayList; +import java.util.List; + +/** + * @see NoContinue + */ +public final class NoParametroFuncao extends NoBloco +{ + List parametros; + /** + * {@inheritDoc } + */ + + + + public NoParametroFuncao() + { + parametros = new ArrayList<>(); + } + + public List getParametros() { + return parametros; + } + + public void addParametro(NoDeclaracaoParametro parametro) { + this.parametros.add(parametro); + } + + @Override + public Object aceitar(VisitanteASA visitante) throws ExcecaoVisitaASA { + return visitante.visitar(this); + } +} diff --git a/core/src/main/java/br/univali/portugol/nucleo/asa/NoSenao.java b/core/src/main/java/br/univali/portugol/nucleo/asa/NoSenao.java new file mode 100644 index 000000000..e8376fe48 --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/asa/NoSenao.java @@ -0,0 +1,108 @@ +package br.univali.portugol.nucleo.asa; + +import br.univali.portugol.nucleo.programa.Estado; + +import java.util.List; + +/** + * Representa um desvio condicional se no código fonte. + *

+ * O comando se serve para desviar a execução do programa baseado em + * uma condição. + *

+ * Este comando possui uma expessão lógica que será avaliada. Caso esta expressão seja + * verdadeira uma lista específica de comandos será executada, caso seja falsa, uma lista + * alternativa de comandos será executada (se houver). Para definir a lista de comandos que + * serão executados caso a condição não seja atendida, deve-se usar a palavra reservada + * senao. + *

+ * Exemplo: + *

+ * 
+ *      funcao exemploSe()
+ *      {
+ *           logico estudo = verdadeiro
+ *           logico aprendo
+ *           logico ficoInteligente
+ *           logico ficoBurro
+ * 
+ *           se (estudo)
+ *           {
+ *                aprendo = verdadeiro
+ * 
+ *                se (aprendo)
+ *                {
+ *                     ficoInteligete = verdadeiro
+ *                     ficoBurro = falso
+ *                }
+ *                senao
+ *                {
+ *                    ficoInteligente = falso
+ *                    ficoBurro = verdadeiro
+ *                }
+ *           }
+ *           senao
+ *           {
+ *                aprendo = falso
+ *                ficoInteligente = falso
+ *                ficoBurro = verdadeiro
+ *           }
+ * 
+ * 
+ * + * @author Luiz Fernando Noschang + * @version 1.0 + */ +public final class NoSenao extends NoBloco +{ + private List blocosFalsos; + /** + * + * @param condicao a expressão que será avaliada para determinar quais blocos + * de comandos serão executados. + * @since 1.0 + */ + public NoSenao() + { + + } + + /** + * Define a lista de blocos que serão executados se a expressão avaliada for falsa. + * + * @param blocosFalsos a lista de blocos que serão executados se a expressão avaliada for falsa. + * @since 1.0 + */ + public void setBlocosFalsos(List blocosFalsos) + { + this.blocosFalsos = blocosFalsos; + } + + /** + * Obtém a lista de blocos que serão executados se a expressão avaliada for falsa. + * + * @return a lista de blocos que serão executados se a expressão avaliada for falsa. + * @since 1.0 + */ + public List getBlocosFalsos() + { + return blocosFalsos; + } + + /** + * {@inheritDoc } + */ + @Override + public Object aceitar(VisitanteASA visitante) throws ExcecaoVisitaASA + { + return visitante.visitar(this); + } + + @Override + public boolean ehParavel(Estado estado) + { + return super.ehParavel(estado); + } + + +} diff --git a/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASA.java b/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASA.java index 762b5ba42..cb51abeca 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASA.java +++ b/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASA.java @@ -103,6 +103,10 @@ public interface VisitanteASA public Object visitar(NoSe noSe) throws ExcecaoVisitaASA; + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA; + + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA; + public Object visitar(NoTitulo noTitulo) throws ExcecaoVisitaASA; public Object visitar(NoVaPara noVaPara) throws ExcecaoVisitaASA; @@ -111,5 +115,6 @@ public interface VisitanteASA public Object visitar(NoDeclaracaoParametro noDeclaracaoParametro) throws ExcecaoVisitaASA; - public Object visitar(NoInclusaoBiblioteca noInclusaoBiblioteca) throws ExcecaoVisitaASA; + public Object visitar(NoInclusaoBiblioteca noInclusaoBiblioteca) throws ExcecaoVisitaASA; + } diff --git a/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASABasico.java b/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASABasico.java index 033a90b50..e46ea339d 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASABasico.java +++ b/core/src/main/java/br/univali/portugol/nucleo/asa/VisitanteASABasico.java @@ -281,6 +281,12 @@ public Object visitar(NoSe noSe) throws ExcecaoVisitaASA throw new ExcecaoVisitaASA(new UnsupportedOperationException("Esta operação ainda não foi implementada. " + this.getClass() + ":" + Thread.currentThread().getStackTrace()[1].getMethodName()), null, null) ; } + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA + { + throw new ExcecaoVisitaASA(new UnsupportedOperationException("Esta operação ainda não foi implementada. " + this.getClass() + ":" + Thread.currentThread().getStackTrace()[1].getMethodName()), null, null) ; + } + @Override public Object visitar(NoTitulo noTitulo) throws ExcecaoVisitaASA { @@ -309,4 +315,9 @@ public Object visitar(NoInclusaoBiblioteca noInclusaoBiblioteca) throws ExcecaoV { throw new ExcecaoVisitaASA(new UnsupportedOperationException("Esta operação ainda não foi implementada. " + this.getClass() + ":" + Thread.currentThread().getStackTrace()[1].getMethodName()), null, null) ; } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + throw new ExcecaoVisitaASA(new UnsupportedOperationException("Esta operação ainda não foi implementada. " + this.getClass() + ":" + Thread.currentThread().getStackTrace()[1].getMethodName()), null, null) ; + } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/execucao/DetectaNosParada.java b/core/src/main/java/br/univali/portugol/nucleo/execucao/DetectaNosParada.java index 3f2170a0f..2b2486b4c 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/execucao/DetectaNosParada.java +++ b/core/src/main/java/br/univali/portugol/nucleo/execucao/DetectaNosParada.java @@ -441,4 +441,14 @@ public Object visitar(NoVaPara noVaPara) throws ExcecaoVisitaASA return null; } + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + return null; + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + return null; + } + } diff --git a/ide/build.gradle b/ide/build.gradle index 15540e90c..d48f7a20e 100644 --- a/ide/build.gradle +++ b/ide/build.gradle @@ -107,14 +107,14 @@ task debug(dependsOn: compileJava, type: JavaExec) { description = 'Runs this program as a JVM application for debugging' group = 'application' - + debug = true doFirst { main = mainClass classpath = sourceSets.main.runtimeClasspath jvmArgs = loadJvmArgs() - debug = true + } } diff --git a/ide/src/main/java/br/univali/ps/nucleo/PSAnalytics.java b/ide/src/main/java/br/univali/ps/nucleo/PSAnalytics.java index 0c5f530af..498133a2d 100644 --- a/ide/src/main/java/br/univali/ps/nucleo/PSAnalytics.java +++ b/ide/src/main/java/br/univali/ps/nucleo/PSAnalytics.java @@ -156,18 +156,23 @@ private void editar_usuario_servidor(String url, String id, boolean set_online, } } } - public static String getHTML(String urlToRead) throws Exception { - StringBuilder result = new StringBuilder(); - URL url = new URL(urlToRead); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("GET"); - BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); - String line; - while ((line = rd.readLine()) != null) { - result.append(line); - } - rd.close(); - return result.toString(); + public static String getHTML(String urlToRead){ + try { + StringBuilder result = new StringBuilder(); + URL url = new URL(urlToRead); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line; + while ((line = rd.readLine()) != null) { + result.append(line); + } + rd.close(); + return result.toString(); + + } catch (Exception e) { + return "FALHA DE CONEXAO"; + } } public void iniciar_sessao_servidor(){ if(pode_enviar_dados) diff --git a/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstOutlineTreeFactory.java b/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstOutlineTreeFactory.java index 10d3caa91..fe337a1c0 100644 --- a/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstOutlineTreeFactory.java +++ b/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstOutlineTreeFactory.java @@ -47,6 +47,7 @@ import br.univali.portugol.nucleo.asa.NoOperacaoSoma; import br.univali.portugol.nucleo.asa.NoOperacaoSubtracao; import br.univali.portugol.nucleo.asa.NoPara; +import br.univali.portugol.nucleo.asa.NoParametroFuncao; import br.univali.portugol.nucleo.asa.NoPare; import br.univali.portugol.nucleo.asa.NoReal; import br.univali.portugol.nucleo.asa.NoReferenciaMatriz; @@ -54,6 +55,7 @@ import br.univali.portugol.nucleo.asa.NoReferenciaVetor; import br.univali.portugol.nucleo.asa.NoRetorne; import br.univali.portugol.nucleo.asa.NoSe; +import br.univali.portugol.nucleo.asa.NoSenao; import br.univali.portugol.nucleo.asa.NoTitulo; import br.univali.portugol.nucleo.asa.NoVaPara; import br.univali.portugol.nucleo.asa.NoVetor; @@ -711,6 +713,16 @@ public Object visitar(NoVaPara noVaPara) throws ExcecaoVisitaASA throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + private class ComparadorNos implements Comparator { @Override diff --git a/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstTreeCellRenderer.java b/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstTreeCellRenderer.java index b3ac45f5c..f28db26e0 100644 --- a/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstTreeCellRenderer.java +++ b/ide/src/main/java/br/univali/ps/ui/rstautil/tree/AstTreeCellRenderer.java @@ -42,6 +42,7 @@ import br.univali.portugol.nucleo.asa.NoOperacaoSoma; import br.univali.portugol.nucleo.asa.NoOperacaoSubtracao; import br.univali.portugol.nucleo.asa.NoPara; +import br.univali.portugol.nucleo.asa.NoParametroFuncao; import br.univali.portugol.nucleo.asa.NoPare; import br.univali.portugol.nucleo.asa.NoReal; import br.univali.portugol.nucleo.asa.NoReferenciaMatriz; @@ -49,6 +50,7 @@ import br.univali.portugol.nucleo.asa.NoReferenciaVetor; import br.univali.portugol.nucleo.asa.NoRetorne; import br.univali.portugol.nucleo.asa.NoSe; +import br.univali.portugol.nucleo.asa.NoSenao; import br.univali.portugol.nucleo.asa.NoTitulo; import br.univali.portugol.nucleo.asa.NoVaPara; import br.univali.portugol.nucleo.asa.NoVetor; @@ -731,4 +733,22 @@ public Object visitar(NoVaPara noVaPara) throws ExcecaoVisitaASA { component.setDisabledIcon(icone); return null; } + + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + component.setText("senao"); + Icon icone = IconFactory.createIcon(IconFactory.CAMINHO_ICONES_PEQUENOS, "unknown.png"); + component.setIcon(icone); + component.setDisabledIcon(icone); + return null; + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + component.setText("parametroFuncao"); + Icon icone = IconFactory.createIcon(IconFactory.CAMINHO_ICONES_PEQUENOS, "unknown.png"); + component.setIcon(icone); + component.setDisabledIcon(icone); + return null; + } } diff --git a/ide/src/main/java/br/univali/ps/ui/rstautil/tree/filters/SymbolTypeFilter.java b/ide/src/main/java/br/univali/ps/ui/rstautil/tree/filters/SymbolTypeFilter.java index 5c88b8bfb..3be8be0cd 100644 --- a/ide/src/main/java/br/univali/ps/ui/rstautil/tree/filters/SymbolTypeFilter.java +++ b/ide/src/main/java/br/univali/ps/ui/rstautil/tree/filters/SymbolTypeFilter.java @@ -43,6 +43,7 @@ import br.univali.portugol.nucleo.asa.NoOperacaoSoma; import br.univali.portugol.nucleo.asa.NoOperacaoSubtracao; import br.univali.portugol.nucleo.asa.NoPara; +import br.univali.portugol.nucleo.asa.NoParametroFuncao; import br.univali.portugol.nucleo.asa.NoPare; import br.univali.portugol.nucleo.asa.NoReal; import br.univali.portugol.nucleo.asa.NoReferenciaMatriz; @@ -50,6 +51,7 @@ import br.univali.portugol.nucleo.asa.NoReferenciaVetor; import br.univali.portugol.nucleo.asa.NoRetorne; import br.univali.portugol.nucleo.asa.NoSe; +import br.univali.portugol.nucleo.asa.NoSenao; import br.univali.portugol.nucleo.asa.NoTitulo; import br.univali.portugol.nucleo.asa.NoVaPara; import br.univali.portugol.nucleo.asa.NoVetor; @@ -596,5 +598,15 @@ public Object visitar(NoInclusaoBiblioteca noInclusaoBiblioteca) throws ExcecaoV { return false; } + + @Override + public Object visitar(NoSenao noSenao) throws ExcecaoVisitaASA { + return false; + } + + @Override + public Object visitar(NoParametroFuncao noParametroFuncao) throws ExcecaoVisitaASA { + return false; + } } }