From df0e705adcd8026f89dfc6c049d13385e61990e7 Mon Sep 17 00:00:00 2001 From: Adsu Date: Fri, 13 Mar 2020 16:16:35 -0300 Subject: [PATCH] corrigindo ajuda desformatada (fix #719) (#766) * corrigindo ajuda desformatada * atualizando testes * iniciando testes * terminando testes * verificando travis * testando travis * testando travis 2 * testando travis 3 * testando travis 4 * testando travis 5 * testando travis 6 * trocando charset de teste --- core/src/main/antlr/Portugol.g4 | 14 +- core/src/main/antlr/PortugolLexico.g4 | 13 +- .../sintatica/antlr4/PortugolLexer.java | 454 +++++++++--------- .../sintatica/antlr4/PortugolLexico.java | 369 +++++++------- .../sintatica/antlr4/PortugolParser.java | 356 +++++++------- .../TradutorMismatchedTokenException.java | 6 +- .../portugol/nucleo/ResourceHandle.java | 4 +- .../sintatica/erros/ErrosSintaticosTest.java | 2 +- ide/build.gradle | 4 + .../ps/dominio/PortugolHTMLHighlighter.java | 3 +- .../formatador/IntegracaoFormatadorTest.java | 54 +++ .../ui/editor/formatador/ResourceHandle.java | 60 +++ .../exemplos/bibliotecas/exemplo1.html | 4 + .../exemplos/bibliotecas/exemplo2.html | 12 + .../declaracoes/constante/exemplo1.html | 2 + .../declaracoes/constante/exemplo2.html | 14 + .../exemplos/declaracoes/funcao/exemplo1.html | 12 + .../exemplos/declaracoes/funcao/exemplo2.html | 54 +++ .../exemplos/declaracoes/matriz/exemplo1.html | 4 + .../exemplos/declaracoes/matriz/exemplo2.html | 34 ++ .../declaracoes/variavel/exemplo1.html | 7 + .../declaracoes/variavel/exemplo2.html | 23 + .../exemplos/declaracoes/vetor/exemplo1.html | 10 + .../exemplos/declaracoes/vetor/exemplo2.html | 29 ++ .../entrada_saida/escreva/exemplo1.html | 1 + .../entrada_saida/escreva/exemplo2.html | 25 + .../exemplos/entrada_saida/leia/exemplo1.html | 8 + .../exemplos/entrada_saida/leia/exemplo2.html | 28 ++ .../entrada_saida/limpa/exemplo1.html | 1 + .../entrada_saida/limpa/exemplo2.html | 20 + .../desvio/escolha_caso/exemplo1.html | 31 ++ .../desvio/escolha_caso/exemplo2.html | 24 + .../desvio/se/exemplo1.html | 11 + .../desvio/se/exemplo2.html | 17 + .../desvio/se_senao/exemplo1.html | 9 + .../desvio/se_senao/exemplo2.html | 21 + .../desvio/se_senao_se/exemplo1.html | 10 + .../desvio/se_senao_se/exemplo2.html | 12 + .../desvio/se_senao_se/exemplo3.html | 24 + .../repeticao/enquanto/exemplo1.html | 5 + .../repeticao/enquanto/exemplo2.html | 14 + .../repeticao/enquantofaca/exemplo1.html | 5 + .../repeticao/enquantofaca/exemplo2.html | 16 + .../repeticao/para/exemplo1.html | 4 + .../repeticao/para/exemplo2.html | 13 + .../expressao/atribuicao/exemplo1.html | 4 + .../expressao/atribuicao/exemplo2.html | 10 + .../expressao/atribuicao/exemplo3.html | 17 + .../operacao_adicao/exemplo1.html | 8 + .../operacao_adicao/exemplo2.html | 13 + .../operacao_divisao/exemplo1.html | 4 + .../operacao_divisao/exemplo2.html | 13 + .../operacao_modulo/exemplo1.html | 4 + .../operacao_modulo/exemplo2.html | 13 + .../operacao_multiplicacao/exemplo1.html | 4 + .../operacao_multiplicacao/exemplo2.html | 13 + .../operacao_subtracao/exemplo1.html | 4 + .../operacao_subtracao/exemplo2.html | 13 + .../bitwise_and/exemplo1.html | 9 + .../bitwise_and/exemplo2.html | 7 + .../bitwise_not/exemplo1.html | 8 + .../bitwise_not/exemplo2.html | 7 + .../bitwise_or/exemplo1.html | 9 + .../bitwise_or/exemplo2.html | 7 + .../bitwise_shift/exemplo1.html | 8 + .../bitwise_shift/exemplo2.html | 8 + .../bitwise_shift/exemplo3.html | 7 + .../bitwise_xor/exemplo1.html | 9 + .../bitwise_xor/exemplo2.html | 7 + .../operacoes_logicas/e/exemplo1.html | 11 + .../operacoes_logicas/e/exemplo2.html | 26 + .../operacoes_logicas/nao/exemplo1.html | 11 + .../operacoes_logicas/nao/exemplo2.html | 19 + .../operacoes_logicas/ou/exemplo1.html | 11 + .../operacoes_logicas/ou/exemplo2.html | 20 + .../expressao/relacional/exemplo1.html | 14 + .../expressao/relacional/exemplo2.html | 23 + .../ui/editor/formatador/exemplos/index.html | 25 + .../exemplos/tipos/cadeia/exemplo1.html | 1 + .../exemplos/tipos/cadeia/exemplo2.html | 13 + .../exemplos/tipos/caracter/exemplo1.html | 1 + .../exemplos/tipos/caracter/exemplo2.html | 13 + .../exemplos/tipos/inteiro/exemplo1.html | 1 + .../exemplos/tipos/inteiro/exemplo2.html | 10 + .../exemplos/tipos/logico/exemplo1.html | 1 + .../exemplos/tipos/logico/exemplo2.html | 15 + .../exemplos/tipos/real/exemplo1.html | 1 + .../exemplos/tipos/real/exemplo2.html | 11 + .../exemplos/tipos/vazio/exemplo1.html | 38 ++ 89 files changed, 1726 insertions(+), 588 deletions(-) create mode 100644 ide/src/test/java/br/univali/ps/ui/editor/formatador/ResourceHandle.java create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo3.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo3.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo3.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/index.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo1.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo2.html create mode 100644 ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/vazio/exemplo1.html diff --git a/core/src/main/antlr/Portugol.g4 b/core/src/main/antlr/Portugol.g4 index 7cf97810f..d5d3f1336 100644 --- a/core/src/main/antlr/Portugol.g4 +++ b/core/src/main/antlr/Portugol.g4 @@ -11,7 +11,7 @@ inclusaoBiblioteca : INCLUA BIBLIOTECA ID (OP_ALIAS_BIBLIOTECA ID)?; listaDeclaracoes - : CONSTANTE? TIPO declaracao (',' declaracao)*; + : CONSTANTE? TIPO declaracao (VIRGULA declaracao)*; declaracao : declaracaoVariavel | declaracaoArray | declaracaoMatriz ; @@ -23,7 +23,7 @@ declaracaoMatriz : ID ABRE_COLCHETES linhaMatriz? FECHA_COLCHETES ABRE_COLCHETES colunaMatriz? FECHA_COLCHETES (OP_ATRIBUICAO inicializacaoMatriz)? ; inicializacaoMatriz - : ABRE_CHAVES inicializacaoArray (',' inicializacaoArray)* FECHA_CHAVES; + : ABRE_CHAVES inicializacaoArray (VIRGULA inicializacaoArray)* FECHA_CHAVES; linhaMatriz : tamanhoArray ; @@ -45,7 +45,7 @@ declaracaoFuncao ABRE_CHAVES comando* FECHA_CHAVES ; listaParametros - : parametro (',' parametro)* ; + : parametro (VIRGULA parametro)* ; parametro : TIPO E_COMERCIAL? ID (parametroArray | parametroMatriz)? ; @@ -93,7 +93,7 @@ facaEnquanto : FACA listaComandos ENQUANTO ABRE_PARENTESES expressao FECHA_PARENTESES ; para - : PARA ABRE_PARENTESES inicializacaoPara? ';' condicao ';' incrementoPara FECHA_PARENTESES listaComandos ; + : PARA ABRE_PARENTESES inicializacaoPara? PONTOVIRGULA condicao PONTOVIRGULA incrementoPara FECHA_PARENTESES listaComandos ; listaComandos : (ABRE_CHAVES comando* FECHA_CHAVES | comando); // 1 comando ou um bloco de comandos entre chaves, possivelmente vazio @@ -114,7 +114,7 @@ escolha : ESCOLHA ABRE_PARENTESES expressao FECHA_PARENTESES ABRE_CHAVES caso* FECHA_CHAVES ; caso - : CASO (CONTRARIO | expressao) ':' (comando* | ABRE_CHAVES comando* FECHA_CHAVES) pare? ; + : CASO (CONTRARIO | expressao) DOISPONTOS (comando* | ABRE_CHAVES comando* FECHA_CHAVES) pare? ; pare : PARE ; @@ -163,7 +163,7 @@ expressao ; listaExpressoes - : (expressao | atribuicaoComposta | atribuicao) (',' (expressao | atribuicaoComposta | atribuicao))* ; + : (expressao | atribuicaoComposta | atribuicao) (VIRGULA (expressao | atribuicaoComposta | atribuicao))* ; escopoBiblioteca - : (ID '.') ; + : (ID PONTO) ; diff --git a/core/src/main/antlr/PortugolLexico.g4 b/core/src/main/antlr/PortugolLexico.g4 index 534c37056..2e6937d82 100644 --- a/core/src/main/antlr/PortugolLexico.g4 +++ b/core/src/main/antlr/PortugolLexico.g4 @@ -100,6 +100,15 @@ HEXADECIMAL: '0'[xX] SIMBOLO_HEXADECIMAL (SIMBOLO_HEXADECIMAL (SIMBOLO_HEXADECIM fragment SIMBOLO_HEXADECIMAL: DIGITO | [A-Fa-f] ; COMENTARIO: '/*' .*? '*/' -> channel(HIDDEN) ; -COMENTARIO_SIMPLES: '//' .*? '\n' -> channel(HIDDEN) ; // acho que o ideal seria mandar os comentários para outro canal como no livro no Antlr4 +//COMENTARIO_SIMPLES: '//' .*? $ -> channel(HIDDEN) ; // acho que o ideal seria mandar os comentários para outro canal como no livro no Antlr4 +COMENTARIO_SIMPLES: '//' .*? ('\n' | EOF) -> channel(HIDDEN) ; // acho que o ideal seria mandar os comentários para outro canal como no livro no Antlr4 -WS : [ \t\n\r]+ -> skip ; +WS : [ \t\r\n]+ -> channel(HIDDEN); + +PONTO : '.'; + +VIRGULA : ','; + +PONTOVIRGULA : ';'; + +DOISPONTOS : ':'; diff --git a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexer.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexer.java index 7a9eabd53..8cac16a05 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexer.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexer.java @@ -17,19 +17,19 @@ public class PortugolLexer extends Lexer { protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache(); public static final int - T__0=1, T__1=2, T__2=3, T__3=4, ABRE_PARENTESES=5, FECHA_PARENTESES=6, - ABRE_COLCHETES=7, FECHA_COLCHETES=8, ABRE_CHAVES=9, FECHA_CHAVES=10, TIPO=11, - FACA=12, ENQUANTO=13, PARA=14, SE=15, SENAO=16, CONSTANTE=17, FUNCAO=18, - PROGRAMA=19, ESCOLHA=20, CASO=21, CONTRARIO=22, PARE=23, RETORNE=24, INCLUA=25, - BIBLIOTECA=26, OP_NAO=27, OP_E_LOGICO=28, OP_OU_LOGICO=29, OP_SUBTRACAO=30, - OP_ADICAO=31, OP_MULTIPLICACAO=32, OP_DIVISAO=33, OP_MOD=34, OP_ATRIBUICAO=35, - OP_IGUALDADE=36, OP_DIFERENCA=37, OP_MAIOR=38, OP_MENOR=39, OP_MENOR_IGUAL=40, - OP_MAIOR_IGUAL=41, OP_INCREMENTO_UNARIO=42, OP_DECREMENTO_UNARIO=43, OP_SHIFT_LEFT=44, - OP_SHIFT_RIGHT=45, OP_XOR=46, OP_OU_BITWISE=47, OP_NOT_BITWISE=48, OP_ALIAS_BIBLIOTECA=49, - E_COMERCIAL=50, OP_MAIS_IGUAL=51, OP_MENOS_IGUAL=52, OP_MULTIPLICACAO_IGUAL=53, - OP_DIVISAO_IGUAL=54, LOGICO=55, VERDADEIRO=56, FALSO=57, CARACTER=58, - STRING=59, ID=60, REAL=61, INT=62, HEXADECIMAL=63, COMENTARIO=64, COMENTARIO_SIMPLES=65, - WS=66; + ABRE_PARENTESES=1, FECHA_PARENTESES=2, ABRE_COLCHETES=3, FECHA_COLCHETES=4, + ABRE_CHAVES=5, FECHA_CHAVES=6, TIPO=7, FACA=8, ENQUANTO=9, PARA=10, SE=11, + SENAO=12, CONSTANTE=13, FUNCAO=14, PROGRAMA=15, ESCOLHA=16, CASO=17, CONTRARIO=18, + PARE=19, RETORNE=20, INCLUA=21, BIBLIOTECA=22, OP_NAO=23, OP_E_LOGICO=24, + OP_OU_LOGICO=25, OP_SUBTRACAO=26, OP_ADICAO=27, OP_MULTIPLICACAO=28, OP_DIVISAO=29, + OP_MOD=30, OP_ATRIBUICAO=31, OP_IGUALDADE=32, OP_DIFERENCA=33, OP_MAIOR=34, + OP_MENOR=35, OP_MENOR_IGUAL=36, OP_MAIOR_IGUAL=37, OP_INCREMENTO_UNARIO=38, + OP_DECREMENTO_UNARIO=39, OP_SHIFT_LEFT=40, OP_SHIFT_RIGHT=41, OP_XOR=42, + OP_OU_BITWISE=43, OP_NOT_BITWISE=44, OP_ALIAS_BIBLIOTECA=45, E_COMERCIAL=46, + OP_MAIS_IGUAL=47, OP_MENOS_IGUAL=48, OP_MULTIPLICACAO_IGUAL=49, OP_DIVISAO_IGUAL=50, + LOGICO=51, VERDADEIRO=52, FALSO=53, CARACTER=54, STRING=55, ID=56, REAL=57, + INT=58, HEXADECIMAL=59, COMENTARIO=60, COMENTARIO_SIMPLES=61, WS=62, PONTO=63, + VIRGULA=64, PONTOVIRGULA=65, DOISPONTOS=66; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -40,50 +40,51 @@ public class PortugolLexer extends Lexer { private static String[] makeRuleNames() { return new String[] { - "T__0", "T__1", "T__2", "T__3", "ABRE_PARENTESES", "FECHA_PARENTESES", - "ABRE_COLCHETES", "FECHA_COLCHETES", "ABRE_CHAVES", "FECHA_CHAVES", "TIPO", - "FACA", "ENQUANTO", "PARA", "SE", "SENAO", "CONSTANTE", "FUNCAO", "PROGRAMA", - "ESCOLHA", "CASO", "CONTRARIO", "PARE", "RETORNE", "INCLUA", "BIBLIOTECA", - "OP_NAO", "OP_E_LOGICO", "OP_OU_LOGICO", "OP_SUBTRACAO", "OP_ADICAO", - "OP_MULTIPLICACAO", "OP_DIVISAO", "OP_MOD", "OP_ATRIBUICAO", "OP_IGUALDADE", - "OP_DIFERENCA", "OP_MAIOR", "OP_MENOR", "OP_MENOR_IGUAL", "OP_MAIOR_IGUAL", - "OP_INCREMENTO_UNARIO", "OP_DECREMENTO_UNARIO", "OP_SHIFT_LEFT", "OP_SHIFT_RIGHT", - "OP_XOR", "OP_OU_BITWISE", "OP_NOT_BITWISE", "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", - "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", - "LOGICO", "VERDADEIRO", "FALSO", "CARACTER", "SEQ_ESC", "ESC_OCTAL", - "ESC_UNICODE", "ESC_CARACTER", "DIGIT_HEX", "STRING", "ID", "LETRA", - "REAL", "DIGITO", "INT", "HEXADECIMAL", "SIMBOLO_HEXADECIMAL", "COMENTARIO", - "COMENTARIO_SIMPLES", "WS" + "ABRE_PARENTESES", "FECHA_PARENTESES", "ABRE_COLCHETES", "FECHA_COLCHETES", + "ABRE_CHAVES", "FECHA_CHAVES", "TIPO", "FACA", "ENQUANTO", "PARA", "SE", + "SENAO", "CONSTANTE", "FUNCAO", "PROGRAMA", "ESCOLHA", "CASO", "CONTRARIO", + "PARE", "RETORNE", "INCLUA", "BIBLIOTECA", "OP_NAO", "OP_E_LOGICO", "OP_OU_LOGICO", + "OP_SUBTRACAO", "OP_ADICAO", "OP_MULTIPLICACAO", "OP_DIVISAO", "OP_MOD", + "OP_ATRIBUICAO", "OP_IGUALDADE", "OP_DIFERENCA", "OP_MAIOR", "OP_MENOR", + "OP_MENOR_IGUAL", "OP_MAIOR_IGUAL", "OP_INCREMENTO_UNARIO", "OP_DECREMENTO_UNARIO", + "OP_SHIFT_LEFT", "OP_SHIFT_RIGHT", "OP_XOR", "OP_OU_BITWISE", "OP_NOT_BITWISE", + "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", + "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", "LOGICO", "VERDADEIRO", + "FALSO", "CARACTER", "SEQ_ESC", "ESC_OCTAL", "ESC_UNICODE", "ESC_CARACTER", + "DIGIT_HEX", "STRING", "ID", "LETRA", "REAL", "DIGITO", "INT", "HEXADECIMAL", + "SIMBOLO_HEXADECIMAL", "COMENTARIO", "COMENTARIO_SIMPLES", "WS", "PONTO", + "VIRGULA", "PONTOVIRGULA", "DOISPONTOS" }; } public static final String[] ruleNames = makeRuleNames(); private static String[] makeLiteralNames() { return new String[] { - null, "','", "';'", "':'", "'.'", "'('", "')'", "'['", "']'", "'{'", - "'}'", null, "'faca'", "'enquanto'", "'para'", "'se'", "'senao'", "'const'", - "'funcao'", "'programa'", "'escolha'", "'caso'", "'contrario'", "'pare'", - "'retorne'", "'inclua'", "'biblioteca'", "'nao'", "'e'", "'ou'", "'-'", - "'+'", "'*'", "'/'", "'%'", "'='", "'=='", "'!='", "'>'", "'<'", "'<='", - "'>='", "'++'", "'--'", "'<<'", "'>>'", "'^'", "'|'", "'~'", "'-->'", - "'&'", "'+='", "'-='", "'*='", "'/='", null, "'verdadeiro'", "'falso'" + null, "'('", "')'", "'['", "']'", "'{'", "'}'", null, "'faca'", "'enquanto'", + "'para'", "'se'", "'senao'", "'const'", "'funcao'", "'programa'", "'escolha'", + "'caso'", "'contrario'", "'pare'", "'retorne'", "'inclua'", "'biblioteca'", + "'nao'", "'e'", "'ou'", "'-'", "'+'", "'*'", "'/'", "'%'", "'='", "'=='", + "'!='", "'>'", "'<'", "'<='", "'>='", "'++'", "'--'", "'<<'", "'>>'", + "'^'", "'|'", "'~'", "'-->'", "'&'", "'+='", "'-='", "'*='", "'/='", + null, "'verdadeiro'", "'falso'", null, null, null, null, null, null, + null, null, null, "'.'", "','", "';'", "':'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static String[] makeSymbolicNames() { return new String[] { - null, null, null, null, null, "ABRE_PARENTESES", "FECHA_PARENTESES", - "ABRE_COLCHETES", "FECHA_COLCHETES", "ABRE_CHAVES", "FECHA_CHAVES", "TIPO", - "FACA", "ENQUANTO", "PARA", "SE", "SENAO", "CONSTANTE", "FUNCAO", "PROGRAMA", - "ESCOLHA", "CASO", "CONTRARIO", "PARE", "RETORNE", "INCLUA", "BIBLIOTECA", - "OP_NAO", "OP_E_LOGICO", "OP_OU_LOGICO", "OP_SUBTRACAO", "OP_ADICAO", - "OP_MULTIPLICACAO", "OP_DIVISAO", "OP_MOD", "OP_ATRIBUICAO", "OP_IGUALDADE", - "OP_DIFERENCA", "OP_MAIOR", "OP_MENOR", "OP_MENOR_IGUAL", "OP_MAIOR_IGUAL", - "OP_INCREMENTO_UNARIO", "OP_DECREMENTO_UNARIO", "OP_SHIFT_LEFT", "OP_SHIFT_RIGHT", - "OP_XOR", "OP_OU_BITWISE", "OP_NOT_BITWISE", "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", - "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", - "LOGICO", "VERDADEIRO", "FALSO", "CARACTER", "STRING", "ID", "REAL", - "INT", "HEXADECIMAL", "COMENTARIO", "COMENTARIO_SIMPLES", "WS" + null, "ABRE_PARENTESES", "FECHA_PARENTESES", "ABRE_COLCHETES", "FECHA_COLCHETES", + "ABRE_CHAVES", "FECHA_CHAVES", "TIPO", "FACA", "ENQUANTO", "PARA", "SE", + "SENAO", "CONSTANTE", "FUNCAO", "PROGRAMA", "ESCOLHA", "CASO", "CONTRARIO", + "PARE", "RETORNE", "INCLUA", "BIBLIOTECA", "OP_NAO", "OP_E_LOGICO", "OP_OU_LOGICO", + "OP_SUBTRACAO", "OP_ADICAO", "OP_MULTIPLICACAO", "OP_DIVISAO", "OP_MOD", + "OP_ATRIBUICAO", "OP_IGUALDADE", "OP_DIFERENCA", "OP_MAIOR", "OP_MENOR", + "OP_MENOR_IGUAL", "OP_MAIOR_IGUAL", "OP_INCREMENTO_UNARIO", "OP_DECREMENTO_UNARIO", + "OP_SHIFT_LEFT", "OP_SHIFT_RIGHT", "OP_XOR", "OP_OU_BITWISE", "OP_NOT_BITWISE", + "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", + "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", "LOGICO", "VERDADEIRO", + "FALSO", "CARACTER", "STRING", "ID", "REAL", "INT", "HEXADECIMAL", "COMENTARIO", + "COMENTARIO_SIMPLES", "WS", "PONTO", "VIRGULA", "PONTOVIRGULA", "DOISPONTOS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -147,7 +148,7 @@ public PortugolLexer(CharStream input) { @Override public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { switch (ruleIndex) { - case 68: + case 64: INT_action((RuleContext)_localctx, actionIndex); break; } @@ -170,7 +171,7 @@ private void INT_action(RuleContext _localctx, int actionIndex) { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2D\u0229\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2D\u022a\b\1\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"+ @@ -180,184 +181,185 @@ private void INT_action(RuleContext _localctx, int actionIndex) { "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ "\tI\4J\tJ\4K\tK\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3"+ - "\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+ - "\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+ - "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u00d0\n\f\3\r\3\r\3\r\3\r\3\r\3\16"+ - "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20"+ - "\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\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\24\3\24\3\24\3\24\3\24\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\26\3\26\3\26\3\26"+ - "\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\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\31\3\32\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\33\3\33\3\33\3\33"+ - "\3\34\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37\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\60\3\60\3\61\3\61\3\62\3\62"+ - "\3\62\3\62\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66\3\67"+ - "\3\67\3\67\38\38\58\u0185\n8\39\39\39\39\39\39\39\39\39\39\39\3:\3:\3"+ - ":\3:\3:\3:\3;\3;\3;\5;\u019b\n;\3;\3;\3<\3<\3<\3<\5<\u01a3\n<\3=\3=\3"+ - "=\3=\3=\3=\3=\3=\3=\5=\u01ae\n=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\5?\u01ba"+ - "\n?\3@\3@\3A\3A\3A\7A\u01c1\nA\fA\16A\u01c4\13A\3A\3A\3B\3B\5B\u01ca\n"+ - "B\3B\3B\7B\u01ce\nB\fB\16B\u01d1\13B\3C\3C\3D\6D\u01d6\nD\rD\16D\u01d7"+ - "\3D\3D\7D\u01dc\nD\fD\16D\u01df\13D\3D\3D\6D\u01e3\nD\rD\16D\u01e4\5D"+ - "\u01e7\nD\3E\3E\3F\6F\u01ec\nF\rF\16F\u01ed\3F\3F\3G\3G\3G\3G\3G\3G\3"+ - "G\3G\5G\u01fa\nG\5G\u01fc\nG\5G\u01fe\nG\5G\u0200\nG\5G\u0202\nG\3H\3"+ - "H\5H\u0206\nH\3I\3I\3I\3I\7I\u020c\nI\fI\16I\u020f\13I\3I\3I\3I\3I\3I"+ - "\3J\3J\3J\3J\7J\u021a\nJ\fJ\16J\u021d\13J\3J\3J\3J\3J\3K\6K\u0224\nK\r"+ - "K\16K\u0225\3K\3K\5\u01c2\u020d\u021b\2L\3\3\5\4\7\5\t\6\13\7\r\b\17\t"+ - "\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27"+ - "-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W"+ - "-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u\u0085\2\u0087?\u0089\2\u008b@\u008dA\u008f\2\u0091B\u0093C\u0095"+ - "D\3\2\13\3\2))\t\2$$^^ddhhppttvv\5\2\62;CHch\4\2\62;aa\4\2C\\c|\3\2\62"+ - ";\4\2ZZzz\4\2CHch\5\2\13\f\17\17\"\"\2\u023f\2\3\3\2\2\2\2\5\3\2\2\2\2"+ - "\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2"+ - "\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2"+ - "\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2"+ - "\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2"+ - "\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2"+ - "\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2"+ - "M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3"+ - "\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2"+ - "\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2"+ - "s\3\2\2\2\2u\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0087\3\2\2\2\2"+ - "\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095"+ - "\3\2\2\2\3\u0097\3\2\2\2\5\u0099\3\2\2\2\7\u009b\3\2\2\2\t\u009d\3\2\2"+ - "\2\13\u009f\3\2\2\2\r\u00a1\3\2\2\2\17\u00a3\3\2\2\2\21\u00a5\3\2\2\2"+ - "\23\u00a7\3\2\2\2\25\u00a9\3\2\2\2\27\u00cf\3\2\2\2\31\u00d1\3\2\2\2\33"+ - "\u00d6\3\2\2\2\35\u00df\3\2\2\2\37\u00e4\3\2\2\2!\u00e7\3\2\2\2#\u00ed"+ - "\3\2\2\2%\u00f3\3\2\2\2\'\u00fa\3\2\2\2)\u0103\3\2\2\2+\u010b\3\2\2\2"+ - "-\u0110\3\2\2\2/\u011a\3\2\2\2\61\u011f\3\2\2\2\63\u0127\3\2\2\2\65\u012e"+ - "\3\2\2\2\67\u0139\3\2\2\29\u013d\3\2\2\2;\u013f\3\2\2\2=\u0142\3\2\2\2"+ - "?\u0144\3\2\2\2A\u0146\3\2\2\2C\u0148\3\2\2\2E\u014a\3\2\2\2G\u014c\3"+ - "\2\2\2I\u014e\3\2\2\2K\u0151\3\2\2\2M\u0154\3\2\2\2O\u0156\3\2\2\2Q\u0158"+ - "\3\2\2\2S\u015b\3\2\2\2U\u015e\3\2\2\2W\u0161\3\2\2\2Y\u0164\3\2\2\2["+ - "\u0167\3\2\2\2]\u016a\3\2\2\2_\u016c\3\2\2\2a\u016e\3\2\2\2c\u0170\3\2"+ - "\2\2e\u0174\3\2\2\2g\u0176\3\2\2\2i\u0179\3\2\2\2k\u017c\3\2\2\2m\u017f"+ - "\3\2\2\2o\u0184\3\2\2\2q\u0186\3\2\2\2s\u0191\3\2\2\2u\u0197\3\2\2\2w"+ - "\u01a2\3\2\2\2y\u01ad\3\2\2\2{\u01af\3\2\2\2}\u01b9\3\2\2\2\177\u01bb"+ - "\3\2\2\2\u0081\u01bd\3\2\2\2\u0083\u01c9\3\2\2\2\u0085\u01d2\3\2\2\2\u0087"+ - "\u01e6\3\2\2\2\u0089\u01e8\3\2\2\2\u008b\u01eb\3\2\2\2\u008d\u01f1\3\2"+ - "\2\2\u008f\u0205\3\2\2\2\u0091\u0207\3\2\2\2\u0093\u0215\3\2\2\2\u0095"+ - "\u0223\3\2\2\2\u0097\u0098\7.\2\2\u0098\4\3\2\2\2\u0099\u009a\7=\2\2\u009a"+ - "\6\3\2\2\2\u009b\u009c\7<\2\2\u009c\b\3\2\2\2\u009d\u009e\7\60\2\2\u009e"+ - "\n\3\2\2\2\u009f\u00a0\7*\2\2\u00a0\f\3\2\2\2\u00a1\u00a2\7+\2\2\u00a2"+ - "\16\3\2\2\2\u00a3\u00a4\7]\2\2\u00a4\20\3\2\2\2\u00a5\u00a6\7_\2\2\u00a6"+ - "\22\3\2\2\2\u00a7\u00a8\7}\2\2\u00a8\24\3\2\2\2\u00a9\u00aa\7\177\2\2"+ - "\u00aa\26\3\2\2\2\u00ab\u00ac\7t\2\2\u00ac\u00ad\7g\2\2\u00ad\u00ae\7"+ - "c\2\2\u00ae\u00d0\7n\2\2\u00af\u00b0\7k\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2"+ - "\7v\2\2\u00b2\u00b3\7g\2\2\u00b3\u00b4\7k\2\2\u00b4\u00b5\7t\2\2\u00b5"+ - "\u00d0\7q\2\2\u00b6\u00b7\7x\2\2\u00b7\u00b8\7c\2\2\u00b8\u00b9\7|\2\2"+ - "\u00b9\u00ba\7k\2\2\u00ba\u00d0\7q\2\2\u00bb\u00bc\7n\2\2\u00bc\u00bd"+ - "\7q\2\2\u00bd\u00be\7i\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7e\2\2\u00c0"+ - "\u00d0\7q\2\2\u00c1\u00c2\7e\2\2\u00c2\u00c3\7c\2\2\u00c3\u00c4\7f\2\2"+ - "\u00c4\u00c5\7g\2\2\u00c5\u00c6\7k\2\2\u00c6\u00d0\7c\2\2\u00c7\u00c8"+ - "\7e\2\2\u00c8\u00c9\7c\2\2\u00c9\u00ca\7t\2\2\u00ca\u00cb\7c\2\2\u00cb"+ - "\u00cc\7e\2\2\u00cc\u00cd\7v\2\2\u00cd\u00ce\7g\2\2\u00ce\u00d0\7t\2\2"+ - "\u00cf\u00ab\3\2\2\2\u00cf\u00af\3\2\2\2\u00cf\u00b6\3\2\2\2\u00cf\u00bb"+ - "\3\2\2\2\u00cf\u00c1\3\2\2\2\u00cf\u00c7\3\2\2\2\u00d0\30\3\2\2\2\u00d1"+ - "\u00d2\7h\2\2\u00d2\u00d3\7c\2\2\u00d3\u00d4\7e\2\2\u00d4\u00d5\7c\2\2"+ - "\u00d5\32\3\2\2\2\u00d6\u00d7\7g\2\2\u00d7\u00d8\7p\2\2\u00d8\u00d9\7"+ - "s\2\2\u00d9\u00da\7w\2\2\u00da\u00db\7c\2\2\u00db\u00dc\7p\2\2\u00dc\u00dd"+ - "\7v\2\2\u00dd\u00de\7q\2\2\u00de\34\3\2\2\2\u00df\u00e0\7r\2\2\u00e0\u00e1"+ - "\7c\2\2\u00e1\u00e2\7t\2\2\u00e2\u00e3\7c\2\2\u00e3\36\3\2\2\2\u00e4\u00e5"+ - "\7u\2\2\u00e5\u00e6\7g\2\2\u00e6 \3\2\2\2\u00e7\u00e8\7u\2\2\u00e8\u00e9"+ - "\7g\2\2\u00e9\u00ea\7p\2\2\u00ea\u00eb\7c\2\2\u00eb\u00ec\7q\2\2\u00ec"+ - "\"\3\2\2\2\u00ed\u00ee\7e\2\2\u00ee\u00ef\7q\2\2\u00ef\u00f0\7p\2\2\u00f0"+ - "\u00f1\7u\2\2\u00f1\u00f2\7v\2\2\u00f2$\3\2\2\2\u00f3\u00f4\7h\2\2\u00f4"+ - "\u00f5\7w\2\2\u00f5\u00f6\7p\2\2\u00f6\u00f7\7e\2\2\u00f7\u00f8\7c\2\2"+ - "\u00f8\u00f9\7q\2\2\u00f9&\3\2\2\2\u00fa\u00fb\7r\2\2\u00fb\u00fc\7t\2"+ - "\2\u00fc\u00fd\7q\2\2\u00fd\u00fe\7i\2\2\u00fe\u00ff\7t\2\2\u00ff\u0100"+ - "\7c\2\2\u0100\u0101\7o\2\2\u0101\u0102\7c\2\2\u0102(\3\2\2\2\u0103\u0104"+ - "\7g\2\2\u0104\u0105\7u\2\2\u0105\u0106\7e\2\2\u0106\u0107\7q\2\2\u0107"+ - "\u0108\7n\2\2\u0108\u0109\7j\2\2\u0109\u010a\7c\2\2\u010a*\3\2\2\2\u010b"+ - "\u010c\7e\2\2\u010c\u010d\7c\2\2\u010d\u010e\7u\2\2\u010e\u010f\7q\2\2"+ - "\u010f,\3\2\2\2\u0110\u0111\7e\2\2\u0111\u0112\7q\2\2\u0112\u0113\7p\2"+ - "\2\u0113\u0114\7v\2\2\u0114\u0115\7t\2\2\u0115\u0116\7c\2\2\u0116\u0117"+ - "\7t\2\2\u0117\u0118\7k\2\2\u0118\u0119\7q\2\2\u0119.\3\2\2\2\u011a\u011b"+ - "\7r\2\2\u011b\u011c\7c\2\2\u011c\u011d\7t\2\2\u011d\u011e\7g\2\2\u011e"+ - "\60\3\2\2\2\u011f\u0120\7t\2\2\u0120\u0121\7g\2\2\u0121\u0122\7v\2\2\u0122"+ - "\u0123\7q\2\2\u0123\u0124\7t\2\2\u0124\u0125\7p\2\2\u0125\u0126\7g\2\2"+ - "\u0126\62\3\2\2\2\u0127\u0128\7k\2\2\u0128\u0129\7p\2\2\u0129\u012a\7"+ - "e\2\2\u012a\u012b\7n\2\2\u012b\u012c\7w\2\2\u012c\u012d\7c\2\2\u012d\64"+ - "\3\2\2\2\u012e\u012f\7d\2\2\u012f\u0130\7k\2\2\u0130\u0131\7d\2\2\u0131"+ - "\u0132\7n\2\2\u0132\u0133\7k\2\2\u0133\u0134\7q\2\2\u0134\u0135\7v\2\2"+ - "\u0135\u0136\7g\2\2\u0136\u0137\7e\2\2\u0137\u0138\7c\2\2\u0138\66\3\2"+ - "\2\2\u0139\u013a\7p\2\2\u013a\u013b\7c\2\2\u013b\u013c\7q\2\2\u013c8\3"+ - "\2\2\2\u013d\u013e\7g\2\2\u013e:\3\2\2\2\u013f\u0140\7q\2\2\u0140\u0141"+ - "\7w\2\2\u0141<\3\2\2\2\u0142\u0143\7/\2\2\u0143>\3\2\2\2\u0144\u0145\7"+ - "-\2\2\u0145@\3\2\2\2\u0146\u0147\7,\2\2\u0147B\3\2\2\2\u0148\u0149\7\61"+ - "\2\2\u0149D\3\2\2\2\u014a\u014b\7\'\2\2\u014bF\3\2\2\2\u014c\u014d\7?"+ - "\2\2\u014dH\3\2\2\2\u014e\u014f\7?\2\2\u014f\u0150\7?\2\2\u0150J\3\2\2"+ - "\2\u0151\u0152\7#\2\2\u0152\u0153\7?\2\2\u0153L\3\2\2\2\u0154\u0155\7"+ - "@\2\2\u0155N\3\2\2\2\u0156\u0157\7>\2\2\u0157P\3\2\2\2\u0158\u0159\7>"+ - "\2\2\u0159\u015a\7?\2\2\u015aR\3\2\2\2\u015b\u015c\7@\2\2\u015c\u015d"+ - "\7?\2\2\u015dT\3\2\2\2\u015e\u015f\7-\2\2\u015f\u0160\7-\2\2\u0160V\3"+ - "\2\2\2\u0161\u0162\7/\2\2\u0162\u0163\7/\2\2\u0163X\3\2\2\2\u0164\u0165"+ - "\7>\2\2\u0165\u0166\7>\2\2\u0166Z\3\2\2\2\u0167\u0168\7@\2\2\u0168\u0169"+ - "\7@\2\2\u0169\\\3\2\2\2\u016a\u016b\7`\2\2\u016b^\3\2\2\2\u016c\u016d"+ - "\7~\2\2\u016d`\3\2\2\2\u016e\u016f\7\u0080\2\2\u016fb\3\2\2\2\u0170\u0171"+ - "\7/\2\2\u0171\u0172\7/\2\2\u0172\u0173\7@\2\2\u0173d\3\2\2\2\u0174\u0175"+ - "\7(\2\2\u0175f\3\2\2\2\u0176\u0177\7-\2\2\u0177\u0178\7?\2\2\u0178h\3"+ - "\2\2\2\u0179\u017a\7/\2\2\u017a\u017b\7?\2\2\u017bj\3\2\2\2\u017c\u017d"+ - "\7,\2\2\u017d\u017e\7?\2\2\u017el\3\2\2\2\u017f\u0180\7\61\2\2\u0180\u0181"+ - "\7?\2\2\u0181n\3\2\2\2\u0182\u0185\5q9\2\u0183\u0185\5s:\2\u0184\u0182"+ - "\3\2\2\2\u0184\u0183\3\2\2\2\u0185p\3\2\2\2\u0186\u0187\7x\2\2\u0187\u0188"+ - "\7g\2\2\u0188\u0189\7t\2\2\u0189\u018a\7f\2\2\u018a\u018b\7c\2\2\u018b"+ - "\u018c\7f\2\2\u018c\u018d\7g\2\2\u018d\u018e\7k\2\2\u018e\u018f\7t\2\2"+ - "\u018f\u0190\7q\2\2\u0190r\3\2\2\2\u0191\u0192\7h\2\2\u0192\u0193\7c\2"+ - "\2\u0193\u0194\7n\2\2\u0194\u0195\7u\2\2\u0195\u0196\7q\2\2\u0196t\3\2"+ - "\2\2\u0197\u019a\7)\2\2\u0198\u019b\5}?\2\u0199\u019b\n\2\2\2\u019a\u0198"+ - "\3\2\2\2\u019a\u0199\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019d\7)\2\2\u019d"+ - "v\3\2\2\2\u019e\u019f\7^\2\2\u019f\u01a3\t\3\2\2\u01a0\u01a3\5{>\2\u01a1"+ - "\u01a3\5y=\2\u01a2\u019e\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a1\3\2\2"+ - "\2\u01a3x\3\2\2\2\u01a4\u01a5\7^\2\2\u01a5\u01a6\4\62\65\2\u01a6\u01a7"+ - "\4\629\2\u01a7\u01ae\4\629\2\u01a8\u01a9\7^\2\2\u01a9\u01aa\4\629\2\u01aa"+ - "\u01ae\4\629\2\u01ab\u01ac\7^\2\2\u01ac\u01ae\4\629\2\u01ad\u01a4\3\2"+ - "\2\2\u01ad\u01a8\3\2\2\2\u01ad\u01ab\3\2\2\2\u01aez\3\2\2\2\u01af\u01b0"+ - "\7^\2\2\u01b0\u01b1\7w\2\2\u01b1\u01b2\5\177@\2\u01b2\u01b3\5\177@\2\u01b3"+ - "\u01b4\5\177@\2\u01b4\u01b5\5\177@\2\u01b5|\3\2\2\2\u01b6\u01ba\5w<\2"+ - "\u01b7\u01b8\7^\2\2\u01b8\u01ba\7)\2\2\u01b9\u01b6\3\2\2\2\u01b9\u01b7"+ - "\3\2\2\2\u01ba~\3\2\2\2\u01bb\u01bc\t\4\2\2\u01bc\u0080\3\2\2\2\u01bd"+ - "\u01c2\7$\2\2\u01be\u01c1\5w<\2\u01bf\u01c1\13\2\2\2\u01c0\u01be\3\2\2"+ - "\2\u01c0\u01bf\3\2\2\2\u01c1\u01c4\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c2\u01c0"+ - "\3\2\2\2\u01c3\u01c5\3\2\2\2\u01c4\u01c2\3\2\2\2\u01c5\u01c6\7$\2\2\u01c6"+ - "\u0082\3\2\2\2\u01c7\u01ca\5\u0085C\2\u01c8\u01ca\7a\2\2\u01c9\u01c7\3"+ - "\2\2\2\u01c9\u01c8\3\2\2\2\u01ca\u01cf\3\2\2\2\u01cb\u01ce\5\u0085C\2"+ - "\u01cc\u01ce\t\5\2\2\u01cd\u01cb\3\2\2\2\u01cd\u01cc\3\2\2\2\u01ce\u01d1"+ - "\3\2\2\2\u01cf\u01cd\3\2\2\2\u01cf\u01d0\3\2\2\2\u01d0\u0084\3\2\2\2\u01d1"+ - "\u01cf\3\2\2\2\u01d2\u01d3\t\6\2\2\u01d3\u0086\3\2\2\2\u01d4\u01d6\5\u0089"+ - "E\2\u01d5\u01d4\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d5\3\2\2\2\u01d7"+ - "\u01d8\3\2\2\2\u01d8\u01d9\3\2\2\2\u01d9\u01dd\7\60\2\2\u01da\u01dc\5"+ - "\u0089E\2\u01db\u01da\3\2\2\2\u01dc\u01df\3\2\2\2\u01dd\u01db\3\2\2\2"+ - "\u01dd\u01de\3\2\2\2\u01de\u01e7\3\2\2\2\u01df\u01dd\3\2\2\2\u01e0\u01e2"+ - "\7\60\2\2\u01e1\u01e3\5\u0089E\2\u01e2\u01e1\3\2\2\2\u01e3\u01e4\3\2\2"+ - "\2\u01e4\u01e2\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e7\3\2\2\2\u01e6\u01d5"+ - "\3\2\2\2\u01e6\u01e0\3\2\2\2\u01e7\u0088\3\2\2\2\u01e8\u01e9\t\7\2\2\u01e9"+ - "\u008a\3\2\2\2\u01ea\u01ec\5\u0089E\2\u01eb\u01ea\3\2\2\2\u01ec\u01ed"+ - "\3\2\2\2\u01ed\u01eb\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee\u01ef\3\2\2\2\u01ef"+ - "\u01f0\bF\2\2\u01f0\u008c\3\2\2\2\u01f1\u01f2\7\62\2\2\u01f2\u01f3\t\b"+ - "\2\2\u01f3\u0201\5\u008fH\2\u01f4\u01ff\5\u008fH\2\u01f5\u01fd\5\u008f"+ - "H\2\u01f6\u01fb\5\u008fH\2\u01f7\u01f9\5\u008fH\2\u01f8\u01fa\5\u008f"+ - "H\2\u01f9\u01f8\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u01fc\3\2\2\2\u01fb"+ - "\u01f7\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fe\3\2\2\2\u01fd\u01f6\3\2"+ - "\2\2\u01fd\u01fe\3\2\2\2\u01fe\u0200\3\2\2\2\u01ff\u01f5\3\2\2\2\u01ff"+ - "\u0200\3\2\2\2\u0200\u0202\3\2\2\2\u0201\u01f4\3\2\2\2\u0201\u0202\3\2"+ - "\2\2\u0202\u008e\3\2\2\2\u0203\u0206\5\u0089E\2\u0204\u0206\t\t\2\2\u0205"+ - "\u0203\3\2\2\2\u0205\u0204\3\2\2\2\u0206\u0090\3\2\2\2\u0207\u0208\7\61"+ - "\2\2\u0208\u0209\7,\2\2\u0209\u020d\3\2\2\2\u020a\u020c\13\2\2\2\u020b"+ - "\u020a\3\2\2\2\u020c\u020f\3\2\2\2\u020d\u020e\3\2\2\2\u020d\u020b\3\2"+ - "\2\2\u020e\u0210\3\2\2\2\u020f\u020d\3\2\2\2\u0210\u0211\7,\2\2\u0211"+ - "\u0212\7\61\2\2\u0212\u0213\3\2\2\2\u0213\u0214\bI\3\2\u0214\u0092\3\2"+ - "\2\2\u0215\u0216\7\61\2\2\u0216\u0217\7\61\2\2\u0217\u021b\3\2\2\2\u0218"+ - "\u021a\13\2\2\2\u0219\u0218\3\2\2\2\u021a\u021d\3\2\2\2\u021b\u021c\3"+ - "\2\2\2\u021b\u0219\3\2\2\2\u021c\u021e\3\2\2\2\u021d\u021b\3\2\2\2\u021e"+ - "\u021f\7\f\2\2\u021f\u0220\3\2\2\2\u0220\u0221\bJ\3\2\u0221\u0094\3\2"+ - "\2\2\u0222\u0224\t\n\2\2\u0223\u0222\3\2\2\2\u0224\u0225\3\2\2\2\u0225"+ - "\u0223\3\2\2\2\u0225\u0226\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u0228\bK"+ - "\4\2\u0228\u0096\3\2\2\2\34\2\u00cf\u0184\u019a\u01a2\u01ad\u01b9\u01c0"+ - "\u01c2\u01c9\u01cd\u01cf\u01d7\u01dd\u01e4\u01e6\u01ed\u01f9\u01fb\u01fd"+ - "\u01ff\u0201\u0205\u020d\u021b\u0225\5\3F\2\2\3\2\b\2\2"; + "\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+ + "\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5"+ + "\b\u00c8\n\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3"+ + "\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16"+ + "\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20"+ + "\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\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\24\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\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ + "\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33"+ + "\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\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\60\3\60\3\60\3\61\3\61\3\61\3"+ + "\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\5\64\u017d\n\64\3\65\3\65\3\65"+ + "\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66"+ + "\3\67\3\67\3\67\5\67\u0193\n\67\3\67\3\67\38\38\38\38\58\u019b\n8\39\3"+ + "9\39\39\39\39\39\39\39\59\u01a6\n9\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\5;\u01b2"+ + "\n;\3<\3<\3=\3=\3=\7=\u01b9\n=\f=\16=\u01bc\13=\3=\3=\3>\3>\5>\u01c2\n"+ + ">\3>\3>\7>\u01c6\n>\f>\16>\u01c9\13>\3?\3?\3@\6@\u01ce\n@\r@\16@\u01cf"+ + "\3@\3@\7@\u01d4\n@\f@\16@\u01d7\13@\3@\3@\6@\u01db\n@\r@\16@\u01dc\5@"+ + "\u01df\n@\3A\3A\3B\6B\u01e4\nB\rB\16B\u01e5\3B\3B\3C\3C\3C\3C\3C\3C\3"+ + "C\3C\5C\u01f2\nC\5C\u01f4\nC\5C\u01f6\nC\5C\u01f8\nC\5C\u01fa\nC\3D\3"+ + "D\5D\u01fe\nD\3E\3E\3E\3E\7E\u0204\nE\fE\16E\u0207\13E\3E\3E\3E\3E\3E"+ + "\3F\3F\3F\3F\7F\u0212\nF\fF\16F\u0215\13F\3F\5F\u0218\nF\3F\3F\3G\6G\u021d"+ + "\nG\rG\16G\u021e\3G\3G\3H\3H\3I\3I\3J\3J\3K\3K\5\u01ba\u0205\u0213\2L"+ + "\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20"+ + "\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37"+ + "= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o"+ + "\2q\2s\2u\2w\2y9{:}\2\177;\u0081\2\u0083<\u0085=\u0087\2\u0089>\u008b"+ + "?\u008d@\u008fA\u0091B\u0093C\u0095D\3\2\f\3\2))\t\2$$^^ddhhppttvv\5\2"+ + "\62;CHch\4\2\62;aa\4\2C\\c|\3\2\62;\4\2ZZzz\4\2CHch\3\3\f\f\5\2\13\f\17"+ + "\17\"\"\2\u0240\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3"+ + "\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2"+ + "\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3"+ + "\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2"+ + "\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2"+ + "9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3"+ + "\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2"+ + "\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2"+ + "_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3"+ + "\2\2\2\2m\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2\177\3\2\2\2\2\u0083\3\2\2\2"+ + "\2\u0085\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f"+ + "\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\3\u0097\3\2\2"+ + "\2\5\u0099\3\2\2\2\7\u009b\3\2\2\2\t\u009d\3\2\2\2\13\u009f\3\2\2\2\r"+ + "\u00a1\3\2\2\2\17\u00c7\3\2\2\2\21\u00c9\3\2\2\2\23\u00ce\3\2\2\2\25\u00d7"+ + "\3\2\2\2\27\u00dc\3\2\2\2\31\u00df\3\2\2\2\33\u00e5\3\2\2\2\35\u00eb\3"+ + "\2\2\2\37\u00f2\3\2\2\2!\u00fb\3\2\2\2#\u0103\3\2\2\2%\u0108\3\2\2\2\'"+ + "\u0112\3\2\2\2)\u0117\3\2\2\2+\u011f\3\2\2\2-\u0126\3\2\2\2/\u0131\3\2"+ + "\2\2\61\u0135\3\2\2\2\63\u0137\3\2\2\2\65\u013a\3\2\2\2\67\u013c\3\2\2"+ + "\29\u013e\3\2\2\2;\u0140\3\2\2\2=\u0142\3\2\2\2?\u0144\3\2\2\2A\u0146"+ + "\3\2\2\2C\u0149\3\2\2\2E\u014c\3\2\2\2G\u014e\3\2\2\2I\u0150\3\2\2\2K"+ + "\u0153\3\2\2\2M\u0156\3\2\2\2O\u0159\3\2\2\2Q\u015c\3\2\2\2S\u015f\3\2"+ + "\2\2U\u0162\3\2\2\2W\u0164\3\2\2\2Y\u0166\3\2\2\2[\u0168\3\2\2\2]\u016c"+ + "\3\2\2\2_\u016e\3\2\2\2a\u0171\3\2\2\2c\u0174\3\2\2\2e\u0177\3\2\2\2g"+ + "\u017c\3\2\2\2i\u017e\3\2\2\2k\u0189\3\2\2\2m\u018f\3\2\2\2o\u019a\3\2"+ + "\2\2q\u01a5\3\2\2\2s\u01a7\3\2\2\2u\u01b1\3\2\2\2w\u01b3\3\2\2\2y\u01b5"+ + "\3\2\2\2{\u01c1\3\2\2\2}\u01ca\3\2\2\2\177\u01de\3\2\2\2\u0081\u01e0\3"+ + "\2\2\2\u0083\u01e3\3\2\2\2\u0085\u01e9\3\2\2\2\u0087\u01fd\3\2\2\2\u0089"+ + "\u01ff\3\2\2\2\u008b\u020d\3\2\2\2\u008d\u021c\3\2\2\2\u008f\u0222\3\2"+ + "\2\2\u0091\u0224\3\2\2\2\u0093\u0226\3\2\2\2\u0095\u0228\3\2\2\2\u0097"+ + "\u0098\7*\2\2\u0098\4\3\2\2\2\u0099\u009a\7+\2\2\u009a\6\3\2\2\2\u009b"+ + "\u009c\7]\2\2\u009c\b\3\2\2\2\u009d\u009e\7_\2\2\u009e\n\3\2\2\2\u009f"+ + "\u00a0\7}\2\2\u00a0\f\3\2\2\2\u00a1\u00a2\7\177\2\2\u00a2\16\3\2\2\2\u00a3"+ + "\u00a4\7t\2\2\u00a4\u00a5\7g\2\2\u00a5\u00a6\7c\2\2\u00a6\u00c8\7n\2\2"+ + "\u00a7\u00a8\7k\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7v\2\2\u00aa\u00ab"+ + "\7g\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7t\2\2\u00ad\u00c8\7q\2\2\u00ae"+ + "\u00af\7x\2\2\u00af\u00b0\7c\2\2\u00b0\u00b1\7|\2\2\u00b1\u00b2\7k\2\2"+ + "\u00b2\u00c8\7q\2\2\u00b3\u00b4\7n\2\2\u00b4\u00b5\7q\2\2\u00b5\u00b6"+ + "\7i\2\2\u00b6\u00b7\7k\2\2\u00b7\u00b8\7e\2\2\u00b8\u00c8\7q\2\2\u00b9"+ + "\u00ba\7e\2\2\u00ba\u00bb\7c\2\2\u00bb\u00bc\7f\2\2\u00bc\u00bd\7g\2\2"+ + "\u00bd\u00be\7k\2\2\u00be\u00c8\7c\2\2\u00bf\u00c0\7e\2\2\u00c0\u00c1"+ + "\7c\2\2\u00c1\u00c2\7t\2\2\u00c2\u00c3\7c\2\2\u00c3\u00c4\7e\2\2\u00c4"+ + "\u00c5\7v\2\2\u00c5\u00c6\7g\2\2\u00c6\u00c8\7t\2\2\u00c7\u00a3\3\2\2"+ + "\2\u00c7\u00a7\3\2\2\2\u00c7\u00ae\3\2\2\2\u00c7\u00b3\3\2\2\2\u00c7\u00b9"+ + "\3\2\2\2\u00c7\u00bf\3\2\2\2\u00c8\20\3\2\2\2\u00c9\u00ca\7h\2\2\u00ca"+ + "\u00cb\7c\2\2\u00cb\u00cc\7e\2\2\u00cc\u00cd\7c\2\2\u00cd\22\3\2\2\2\u00ce"+ + "\u00cf\7g\2\2\u00cf\u00d0\7p\2\2\u00d0\u00d1\7s\2\2\u00d1\u00d2\7w\2\2"+ + "\u00d2\u00d3\7c\2\2\u00d3\u00d4\7p\2\2\u00d4\u00d5\7v\2\2\u00d5\u00d6"+ + "\7q\2\2\u00d6\24\3\2\2\2\u00d7\u00d8\7r\2\2\u00d8\u00d9\7c\2\2\u00d9\u00da"+ + "\7t\2\2\u00da\u00db\7c\2\2\u00db\26\3\2\2\2\u00dc\u00dd\7u\2\2\u00dd\u00de"+ + "\7g\2\2\u00de\30\3\2\2\2\u00df\u00e0\7u\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2"+ + "\7p\2\2\u00e2\u00e3\7c\2\2\u00e3\u00e4\7q\2\2\u00e4\32\3\2\2\2\u00e5\u00e6"+ + "\7e\2\2\u00e6\u00e7\7q\2\2\u00e7\u00e8\7p\2\2\u00e8\u00e9\7u\2\2\u00e9"+ + "\u00ea\7v\2\2\u00ea\34\3\2\2\2\u00eb\u00ec\7h\2\2\u00ec\u00ed\7w\2\2\u00ed"+ + "\u00ee\7p\2\2\u00ee\u00ef\7e\2\2\u00ef\u00f0\7c\2\2\u00f0\u00f1\7q\2\2"+ + "\u00f1\36\3\2\2\2\u00f2\u00f3\7r\2\2\u00f3\u00f4\7t\2\2\u00f4\u00f5\7"+ + "q\2\2\u00f5\u00f6\7i\2\2\u00f6\u00f7\7t\2\2\u00f7\u00f8\7c\2\2\u00f8\u00f9"+ + "\7o\2\2\u00f9\u00fa\7c\2\2\u00fa \3\2\2\2\u00fb\u00fc\7g\2\2\u00fc\u00fd"+ + "\7u\2\2\u00fd\u00fe\7e\2\2\u00fe\u00ff\7q\2\2\u00ff\u0100\7n\2\2\u0100"+ + "\u0101\7j\2\2\u0101\u0102\7c\2\2\u0102\"\3\2\2\2\u0103\u0104\7e\2\2\u0104"+ + "\u0105\7c\2\2\u0105\u0106\7u\2\2\u0106\u0107\7q\2\2\u0107$\3\2\2\2\u0108"+ + "\u0109\7e\2\2\u0109\u010a\7q\2\2\u010a\u010b\7p\2\2\u010b\u010c\7v\2\2"+ + "\u010c\u010d\7t\2\2\u010d\u010e\7c\2\2\u010e\u010f\7t\2\2\u010f\u0110"+ + "\7k\2\2\u0110\u0111\7q\2\2\u0111&\3\2\2\2\u0112\u0113\7r\2\2\u0113\u0114"+ + "\7c\2\2\u0114\u0115\7t\2\2\u0115\u0116\7g\2\2\u0116(\3\2\2\2\u0117\u0118"+ + "\7t\2\2\u0118\u0119\7g\2\2\u0119\u011a\7v\2\2\u011a\u011b\7q\2\2\u011b"+ + "\u011c\7t\2\2\u011c\u011d\7p\2\2\u011d\u011e\7g\2\2\u011e*\3\2\2\2\u011f"+ + "\u0120\7k\2\2\u0120\u0121\7p\2\2\u0121\u0122\7e\2\2\u0122\u0123\7n\2\2"+ + "\u0123\u0124\7w\2\2\u0124\u0125\7c\2\2\u0125,\3\2\2\2\u0126\u0127\7d\2"+ + "\2\u0127\u0128\7k\2\2\u0128\u0129\7d\2\2\u0129\u012a\7n\2\2\u012a\u012b"+ + "\7k\2\2\u012b\u012c\7q\2\2\u012c\u012d\7v\2\2\u012d\u012e\7g\2\2\u012e"+ + "\u012f\7e\2\2\u012f\u0130\7c\2\2\u0130.\3\2\2\2\u0131\u0132\7p\2\2\u0132"+ + "\u0133\7c\2\2\u0133\u0134\7q\2\2\u0134\60\3\2\2\2\u0135\u0136\7g\2\2\u0136"+ + "\62\3\2\2\2\u0137\u0138\7q\2\2\u0138\u0139\7w\2\2\u0139\64\3\2\2\2\u013a"+ + "\u013b\7/\2\2\u013b\66\3\2\2\2\u013c\u013d\7-\2\2\u013d8\3\2\2\2\u013e"+ + "\u013f\7,\2\2\u013f:\3\2\2\2\u0140\u0141\7\61\2\2\u0141<\3\2\2\2\u0142"+ + "\u0143\7\'\2\2\u0143>\3\2\2\2\u0144\u0145\7?\2\2\u0145@\3\2\2\2\u0146"+ + "\u0147\7?\2\2\u0147\u0148\7?\2\2\u0148B\3\2\2\2\u0149\u014a\7#\2\2\u014a"+ + "\u014b\7?\2\2\u014bD\3\2\2\2\u014c\u014d\7@\2\2\u014dF\3\2\2\2\u014e\u014f"+ + "\7>\2\2\u014fH\3\2\2\2\u0150\u0151\7>\2\2\u0151\u0152\7?\2\2\u0152J\3"+ + "\2\2\2\u0153\u0154\7@\2\2\u0154\u0155\7?\2\2\u0155L\3\2\2\2\u0156\u0157"+ + "\7-\2\2\u0157\u0158\7-\2\2\u0158N\3\2\2\2\u0159\u015a\7/\2\2\u015a\u015b"+ + "\7/\2\2\u015bP\3\2\2\2\u015c\u015d\7>\2\2\u015d\u015e\7>\2\2\u015eR\3"+ + "\2\2\2\u015f\u0160\7@\2\2\u0160\u0161\7@\2\2\u0161T\3\2\2\2\u0162\u0163"+ + "\7`\2\2\u0163V\3\2\2\2\u0164\u0165\7~\2\2\u0165X\3\2\2\2\u0166\u0167\7"+ + "\u0080\2\2\u0167Z\3\2\2\2\u0168\u0169\7/\2\2\u0169\u016a\7/\2\2\u016a"+ + "\u016b\7@\2\2\u016b\\\3\2\2\2\u016c\u016d\7(\2\2\u016d^\3\2\2\2\u016e"+ + "\u016f\7-\2\2\u016f\u0170\7?\2\2\u0170`\3\2\2\2\u0171\u0172\7/\2\2\u0172"+ + "\u0173\7?\2\2\u0173b\3\2\2\2\u0174\u0175\7,\2\2\u0175\u0176\7?\2\2\u0176"+ + "d\3\2\2\2\u0177\u0178\7\61\2\2\u0178\u0179\7?\2\2\u0179f\3\2\2\2\u017a"+ + "\u017d\5i\65\2\u017b\u017d\5k\66\2\u017c\u017a\3\2\2\2\u017c\u017b\3\2"+ + "\2\2\u017dh\3\2\2\2\u017e\u017f\7x\2\2\u017f\u0180\7g\2\2\u0180\u0181"+ + "\7t\2\2\u0181\u0182\7f\2\2\u0182\u0183\7c\2\2\u0183\u0184\7f\2\2\u0184"+ + "\u0185\7g\2\2\u0185\u0186\7k\2\2\u0186\u0187\7t\2\2\u0187\u0188\7q\2\2"+ + "\u0188j\3\2\2\2\u0189\u018a\7h\2\2\u018a\u018b\7c\2\2\u018b\u018c\7n\2"+ + "\2\u018c\u018d\7u\2\2\u018d\u018e\7q\2\2\u018el\3\2\2\2\u018f\u0192\7"+ + ")\2\2\u0190\u0193\5u;\2\u0191\u0193\n\2\2\2\u0192\u0190\3\2\2\2\u0192"+ + "\u0191\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\7)\2\2\u0195n\3\2\2\2\u0196"+ + "\u0197\7^\2\2\u0197\u019b\t\3\2\2\u0198\u019b\5s:\2\u0199\u019b\5q9\2"+ + "\u019a\u0196\3\2\2\2\u019a\u0198\3\2\2\2\u019a\u0199\3\2\2\2\u019bp\3"+ + "\2\2\2\u019c\u019d\7^\2\2\u019d\u019e\4\62\65\2\u019e\u019f\4\629\2\u019f"+ + "\u01a6\4\629\2\u01a0\u01a1\7^\2\2\u01a1\u01a2\4\629\2\u01a2\u01a6\4\62"+ + "9\2\u01a3\u01a4\7^\2\2\u01a4\u01a6\4\629\2\u01a5\u019c\3\2\2\2\u01a5\u01a0"+ + "\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a6r\3\2\2\2\u01a7\u01a8\7^\2\2\u01a8\u01a9"+ + "\7w\2\2\u01a9\u01aa\5w<\2\u01aa\u01ab\5w<\2\u01ab\u01ac\5w<\2\u01ac\u01ad"+ + "\5w<\2\u01adt\3\2\2\2\u01ae\u01b2\5o8\2\u01af\u01b0\7^\2\2\u01b0\u01b2"+ + "\7)\2\2\u01b1\u01ae\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2v\3\2\2\2\u01b3\u01b4"+ + "\t\4\2\2\u01b4x\3\2\2\2\u01b5\u01ba\7$\2\2\u01b6\u01b9\5o8\2\u01b7\u01b9"+ + "\13\2\2\2\u01b8\u01b6\3\2\2\2\u01b8\u01b7\3\2\2\2\u01b9\u01bc\3\2\2\2"+ + "\u01ba\u01bb\3\2\2\2\u01ba\u01b8\3\2\2\2\u01bb\u01bd\3\2\2\2\u01bc\u01ba"+ + "\3\2\2\2\u01bd\u01be\7$\2\2\u01bez\3\2\2\2\u01bf\u01c2\5}?\2\u01c0\u01c2"+ + "\7a\2\2\u01c1\u01bf\3\2\2\2\u01c1\u01c0\3\2\2\2\u01c2\u01c7\3\2\2\2\u01c3"+ + "\u01c6\5}?\2\u01c4\u01c6\t\5\2\2\u01c5\u01c3\3\2\2\2\u01c5\u01c4\3\2\2"+ + "\2\u01c6\u01c9\3\2\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8|"+ + "\3\2\2\2\u01c9\u01c7\3\2\2\2\u01ca\u01cb\t\6\2\2\u01cb~\3\2\2\2\u01cc"+ + "\u01ce\5\u0081A\2\u01cd\u01cc\3\2\2\2\u01ce\u01cf\3\2\2\2\u01cf\u01cd"+ + "\3\2\2\2\u01cf\u01d0\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d5\7\60\2\2"+ + "\u01d2\u01d4\5\u0081A\2\u01d3\u01d2\3\2\2\2\u01d4\u01d7\3\2\2\2\u01d5"+ + "\u01d3\3\2\2\2\u01d5\u01d6\3\2\2\2\u01d6\u01df\3\2\2\2\u01d7\u01d5\3\2"+ + "\2\2\u01d8\u01da\7\60\2\2\u01d9\u01db\5\u0081A\2\u01da\u01d9\3\2\2\2\u01db"+ + "\u01dc\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01df\3\2"+ + "\2\2\u01de\u01cd\3\2\2\2\u01de\u01d8\3\2\2\2\u01df\u0080\3\2\2\2\u01e0"+ + "\u01e1\t\7\2\2\u01e1\u0082\3\2\2\2\u01e2\u01e4\5\u0081A\2\u01e3\u01e2"+ + "\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e3\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6"+ + "\u01e7\3\2\2\2\u01e7\u01e8\bB\2\2\u01e8\u0084\3\2\2\2\u01e9\u01ea\7\62"+ + "\2\2\u01ea\u01eb\t\b\2\2\u01eb\u01f9\5\u0087D\2\u01ec\u01f7\5\u0087D\2"+ + "\u01ed\u01f5\5\u0087D\2\u01ee\u01f3\5\u0087D\2\u01ef\u01f1\5\u0087D\2"+ + "\u01f0\u01f2\5\u0087D\2\u01f1\u01f0\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2"+ + "\u01f4\3\2\2\2\u01f3\u01ef\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f6\3\2"+ + "\2\2\u01f5\u01ee\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f8\3\2\2\2\u01f7"+ + "\u01ed\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8\u01fa\3\2\2\2\u01f9\u01ec\3\2"+ + "\2\2\u01f9\u01fa\3\2\2\2\u01fa\u0086\3\2\2\2\u01fb\u01fe\5\u0081A\2\u01fc"+ + "\u01fe\t\t\2\2\u01fd\u01fb\3\2\2\2\u01fd\u01fc\3\2\2\2\u01fe\u0088\3\2"+ + "\2\2\u01ff\u0200\7\61\2\2\u0200\u0201\7,\2\2\u0201\u0205\3\2\2\2\u0202"+ + "\u0204\13\2\2\2\u0203\u0202\3\2\2\2\u0204\u0207\3\2\2\2\u0205\u0206\3"+ + "\2\2\2\u0205\u0203\3\2\2\2\u0206\u0208\3\2\2\2\u0207\u0205\3\2\2\2\u0208"+ + "\u0209\7,\2\2\u0209\u020a\7\61\2\2\u020a\u020b\3\2\2\2\u020b\u020c\bE"+ + "\3\2\u020c\u008a\3\2\2\2\u020d\u020e\7\61\2\2\u020e\u020f\7\61\2\2\u020f"+ + "\u0213\3\2\2\2\u0210\u0212\13\2\2\2\u0211\u0210\3\2\2\2\u0212\u0215\3"+ + "\2\2\2\u0213\u0214\3\2\2\2\u0213\u0211\3\2\2\2\u0214\u0217\3\2\2\2\u0215"+ + "\u0213\3\2\2\2\u0216\u0218\t\n\2\2\u0217\u0216\3\2\2\2\u0218\u0219\3\2"+ + "\2\2\u0219\u021a\bF\3\2\u021a\u008c\3\2\2\2\u021b\u021d\t\13\2\2\u021c"+ + "\u021b\3\2\2\2\u021d\u021e\3\2\2\2\u021e\u021c\3\2\2\2\u021e\u021f\3\2"+ + "\2\2\u021f\u0220\3\2\2\2\u0220\u0221\bG\3\2\u0221\u008e\3\2\2\2\u0222"+ + "\u0223\7\60\2\2\u0223\u0090\3\2\2\2\u0224\u0225\7.\2\2\u0225\u0092\3\2"+ + "\2\2\u0226\u0227\7=\2\2\u0227\u0094\3\2\2\2\u0228\u0229\7<\2\2\u0229\u0096"+ + "\3\2\2\2\35\2\u00c7\u017c\u0192\u019a\u01a5\u01b1\u01b8\u01ba\u01c1\u01c5"+ + "\u01c7\u01cf\u01d5\u01dc\u01de\u01e5\u01f1\u01f3\u01f5\u01f7\u01f9\u01fd"+ + "\u0205\u0213\u0217\u021e\4\3B\2\2\3\2"; 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/PortugolLexico.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexico.java index 0411f855a..f24e8a55f 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexico.java +++ b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolLexico.java @@ -28,7 +28,8 @@ public class PortugolLexico extends Lexer { OP_OU_BITWISE=43, OP_NOT_BITWISE=44, OP_ALIAS_BIBLIOTECA=45, E_COMERCIAL=46, OP_MAIS_IGUAL=47, OP_MENOS_IGUAL=48, OP_MULTIPLICACAO_IGUAL=49, OP_DIVISAO_IGUAL=50, LOGICO=51, VERDADEIRO=52, FALSO=53, CARACTER=54, STRING=55, ID=56, REAL=57, - INT=58, HEXADECIMAL=59, COMENTARIO=60, COMENTARIO_SIMPLES=61, WS=62; + INT=58, HEXADECIMAL=59, COMENTARIO=60, COMENTARIO_SIMPLES=61, WS=62, PONTO=63, + VIRGULA=64, PONTOVIRGULA=65, DOISPONTOS=66; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -51,7 +52,8 @@ private static String[] makeRuleNames() { "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", "LOGICO", "VERDADEIRO", "FALSO", "CARACTER", "SEQ_ESC", "ESC_OCTAL", "ESC_UNICODE", "ESC_CARACTER", "DIGIT_HEX", "STRING", "ID", "LETRA", "REAL", "DIGITO", "INT", "HEXADECIMAL", - "SIMBOLO_HEXADECIMAL", "COMENTARIO", "COMENTARIO_SIMPLES", "WS" + "SIMBOLO_HEXADECIMAL", "COMENTARIO", "COMENTARIO_SIMPLES", "WS", "PONTO", + "VIRGULA", "PONTOVIRGULA", "DOISPONTOS" }; } public static final String[] ruleNames = makeRuleNames(); @@ -64,7 +66,8 @@ private static String[] makeLiteralNames() { "'nao'", "'e'", "'ou'", "'-'", "'+'", "'*'", "'/'", "'%'", "'='", "'=='", "'!='", "'>'", "'<'", "'<='", "'>='", "'++'", "'--'", "'<<'", "'>>'", "'^'", "'|'", "'~'", "'-->'", "'&'", "'+='", "'-='", "'*='", "'/='", - null, "'verdadeiro'", "'falso'" + null, "'verdadeiro'", "'falso'", null, null, null, null, null, null, + null, null, null, "'.'", "','", "';'", "':'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -81,7 +84,7 @@ private static String[] makeSymbolicNames() { "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", "LOGICO", "VERDADEIRO", "FALSO", "CARACTER", "STRING", "ID", "REAL", "INT", "HEXADECIMAL", "COMENTARIO", - "COMENTARIO_SIMPLES", "WS" + "COMENTARIO_SIMPLES", "WS", "PONTO", "VIRGULA", "PONTOVIRGULA", "DOISPONTOS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -168,7 +171,7 @@ private void INT_action(RuleContext _localctx, int actionIndex) { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2@\u0219\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2D\u022a\b\1\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"+ @@ -176,181 +179,187 @@ private void INT_action(RuleContext _localctx, int actionIndex) { "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ - "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\3\2\3\2\3"+ - "\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+ - "\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+ - "\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u00c0\n\b\3\t\3\t\3\t\3"+ - "\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3"+ - "\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\17"+ - "\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ - "\3\20\3\21\3\21\3\21\3\21\3\21\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\24\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\26\3\26\3\26\3\26\3\26"+ - "\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30"+ - "\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35"+ - "\3\36\3\36\3\37\3\37\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\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3"+ - "\63\3\64\3\64\5\64\u0175\n\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65"+ - "\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\5\67\u018b"+ - "\n\67\3\67\3\67\38\38\38\38\58\u0193\n8\39\39\39\39\39\39\39\39\39\59"+ - "\u019e\n9\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\5;\u01aa\n;\3<\3<\3=\3=\3=\7="+ - "\u01b1\n=\f=\16=\u01b4\13=\3=\3=\3>\3>\5>\u01ba\n>\3>\3>\7>\u01be\n>\f"+ - ">\16>\u01c1\13>\3?\3?\3@\6@\u01c6\n@\r@\16@\u01c7\3@\3@\7@\u01cc\n@\f"+ - "@\16@\u01cf\13@\3@\3@\6@\u01d3\n@\r@\16@\u01d4\5@\u01d7\n@\3A\3A\3B\6"+ - "B\u01dc\nB\rB\16B\u01dd\3B\3B\3C\3C\3C\3C\3C\3C\3C\3C\5C\u01ea\nC\5C\u01ec"+ - "\nC\5C\u01ee\nC\5C\u01f0\nC\5C\u01f2\nC\3D\3D\5D\u01f6\nD\3E\3E\3E\3E"+ - "\7E\u01fc\nE\fE\16E\u01ff\13E\3E\3E\3E\3E\3E\3F\3F\3F\3F\7F\u020a\nF\f"+ - "F\16F\u020d\13F\3F\3F\3F\3F\3G\6G\u0214\nG\rG\16G\u0215\3G\3G\5\u01b2"+ - "\u01fd\u020b\2H\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31"+ - "\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65"+ - "\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64"+ - "g\65i\66k\67m8o\2q\2s\2u\2w\2y9{:}\2\177;\u0081\2\u0083<\u0085=\u0087"+ - "\2\u0089>\u008b?\u008d@\3\2\13\3\2))\t\2$$^^ddhhppttvv\5\2\62;CHch\4\2"+ - "\62;aa\4\2C\\c|\3\2\62;\4\2ZZzz\4\2CHch\5\2\13\f\17\17\"\"\2\u022f\2\3"+ - "\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2"+ - "\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31"+ - "\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2"+ - "\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2"+ - "\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2"+ - "\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2"+ - "I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3"+ - "\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2"+ - "\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2"+ - "y\3\2\2\2\2{\3\2\2\2\2\177\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0089"+ - "\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\3\u008f\3\2\2\2\5\u0091\3\2\2"+ - "\2\7\u0093\3\2\2\2\t\u0095\3\2\2\2\13\u0097\3\2\2\2\r\u0099\3\2\2\2\17"+ - "\u00bf\3\2\2\2\21\u00c1\3\2\2\2\23\u00c6\3\2\2\2\25\u00cf\3\2\2\2\27\u00d4"+ - "\3\2\2\2\31\u00d7\3\2\2\2\33\u00dd\3\2\2\2\35\u00e3\3\2\2\2\37\u00ea\3"+ - "\2\2\2!\u00f3\3\2\2\2#\u00fb\3\2\2\2%\u0100\3\2\2\2\'\u010a\3\2\2\2)\u010f"+ - "\3\2\2\2+\u0117\3\2\2\2-\u011e\3\2\2\2/\u0129\3\2\2\2\61\u012d\3\2\2\2"+ - "\63\u012f\3\2\2\2\65\u0132\3\2\2\2\67\u0134\3\2\2\29\u0136\3\2\2\2;\u0138"+ - "\3\2\2\2=\u013a\3\2\2\2?\u013c\3\2\2\2A\u013e\3\2\2\2C\u0141\3\2\2\2E"+ - "\u0144\3\2\2\2G\u0146\3\2\2\2I\u0148\3\2\2\2K\u014b\3\2\2\2M\u014e\3\2"+ - "\2\2O\u0151\3\2\2\2Q\u0154\3\2\2\2S\u0157\3\2\2\2U\u015a\3\2\2\2W\u015c"+ - "\3\2\2\2Y\u015e\3\2\2\2[\u0160\3\2\2\2]\u0164\3\2\2\2_\u0166\3\2\2\2a"+ - "\u0169\3\2\2\2c\u016c\3\2\2\2e\u016f\3\2\2\2g\u0174\3\2\2\2i\u0176\3\2"+ - "\2\2k\u0181\3\2\2\2m\u0187\3\2\2\2o\u0192\3\2\2\2q\u019d\3\2\2\2s\u019f"+ - "\3\2\2\2u\u01a9\3\2\2\2w\u01ab\3\2\2\2y\u01ad\3\2\2\2{\u01b9\3\2\2\2}"+ - "\u01c2\3\2\2\2\177\u01d6\3\2\2\2\u0081\u01d8\3\2\2\2\u0083\u01db\3\2\2"+ - "\2\u0085\u01e1\3\2\2\2\u0087\u01f5\3\2\2\2\u0089\u01f7\3\2\2\2\u008b\u0205"+ - "\3\2\2\2\u008d\u0213\3\2\2\2\u008f\u0090\7*\2\2\u0090\4\3\2\2\2\u0091"+ - "\u0092\7+\2\2\u0092\6\3\2\2\2\u0093\u0094\7]\2\2\u0094\b\3\2\2\2\u0095"+ - "\u0096\7_\2\2\u0096\n\3\2\2\2\u0097\u0098\7}\2\2\u0098\f\3\2\2\2\u0099"+ - "\u009a\7\177\2\2\u009a\16\3\2\2\2\u009b\u009c\7t\2\2\u009c\u009d\7g\2"+ - "\2\u009d\u009e\7c\2\2\u009e\u00c0\7n\2\2\u009f\u00a0\7k\2\2\u00a0\u00a1"+ - "\7p\2\2\u00a1\u00a2\7v\2\2\u00a2\u00a3\7g\2\2\u00a3\u00a4\7k\2\2\u00a4"+ - "\u00a5\7t\2\2\u00a5\u00c0\7q\2\2\u00a6\u00a7\7x\2\2\u00a7\u00a8\7c\2\2"+ - "\u00a8\u00a9\7|\2\2\u00a9\u00aa\7k\2\2\u00aa\u00c0\7q\2\2\u00ab\u00ac"+ - "\7n\2\2\u00ac\u00ad\7q\2\2\u00ad\u00ae\7i\2\2\u00ae\u00af\7k\2\2\u00af"+ - "\u00b0\7e\2\2\u00b0\u00c0\7q\2\2\u00b1\u00b2\7e\2\2\u00b2\u00b3\7c\2\2"+ - "\u00b3\u00b4\7f\2\2\u00b4\u00b5\7g\2\2\u00b5\u00b6\7k\2\2\u00b6\u00c0"+ - "\7c\2\2\u00b7\u00b8\7e\2\2\u00b8\u00b9\7c\2\2\u00b9\u00ba\7t\2\2\u00ba"+ - "\u00bb\7c\2\2\u00bb\u00bc\7e\2\2\u00bc\u00bd\7v\2\2\u00bd\u00be\7g\2\2"+ - "\u00be\u00c0\7t\2\2\u00bf\u009b\3\2\2\2\u00bf\u009f\3\2\2\2\u00bf\u00a6"+ - "\3\2\2\2\u00bf\u00ab\3\2\2\2\u00bf\u00b1\3\2\2\2\u00bf\u00b7\3\2\2\2\u00c0"+ - "\20\3\2\2\2\u00c1\u00c2\7h\2\2\u00c2\u00c3\7c\2\2\u00c3\u00c4\7e\2\2\u00c4"+ - "\u00c5\7c\2\2\u00c5\22\3\2\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8\7p\2\2\u00c8"+ - "\u00c9\7s\2\2\u00c9\u00ca\7w\2\2\u00ca\u00cb\7c\2\2\u00cb\u00cc\7p\2\2"+ - "\u00cc\u00cd\7v\2\2\u00cd\u00ce\7q\2\2\u00ce\24\3\2\2\2\u00cf\u00d0\7"+ - "r\2\2\u00d0\u00d1\7c\2\2\u00d1\u00d2\7t\2\2\u00d2\u00d3\7c\2\2\u00d3\26"+ - "\3\2\2\2\u00d4\u00d5\7u\2\2\u00d5\u00d6\7g\2\2\u00d6\30\3\2\2\2\u00d7"+ - "\u00d8\7u\2\2\u00d8\u00d9\7g\2\2\u00d9\u00da\7p\2\2\u00da\u00db\7c\2\2"+ - "\u00db\u00dc\7q\2\2\u00dc\32\3\2\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7"+ - "q\2\2\u00df\u00e0\7p\2\2\u00e0\u00e1\7u\2\2\u00e1\u00e2\7v\2\2\u00e2\34"+ - "\3\2\2\2\u00e3\u00e4\7h\2\2\u00e4\u00e5\7w\2\2\u00e5\u00e6\7p\2\2\u00e6"+ - "\u00e7\7e\2\2\u00e7\u00e8\7c\2\2\u00e8\u00e9\7q\2\2\u00e9\36\3\2\2\2\u00ea"+ - "\u00eb\7r\2\2\u00eb\u00ec\7t\2\2\u00ec\u00ed\7q\2\2\u00ed\u00ee\7i\2\2"+ - "\u00ee\u00ef\7t\2\2\u00ef\u00f0\7c\2\2\u00f0\u00f1\7o\2\2\u00f1\u00f2"+ - "\7c\2\2\u00f2 \3\2\2\2\u00f3\u00f4\7g\2\2\u00f4\u00f5\7u\2\2\u00f5\u00f6"+ - "\7e\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8\7n\2\2\u00f8\u00f9\7j\2\2\u00f9"+ - "\u00fa\7c\2\2\u00fa\"\3\2\2\2\u00fb\u00fc\7e\2\2\u00fc\u00fd\7c\2\2\u00fd"+ - "\u00fe\7u\2\2\u00fe\u00ff\7q\2\2\u00ff$\3\2\2\2\u0100\u0101\7e\2\2\u0101"+ - "\u0102\7q\2\2\u0102\u0103\7p\2\2\u0103\u0104\7v\2\2\u0104\u0105\7t\2\2"+ - "\u0105\u0106\7c\2\2\u0106\u0107\7t\2\2\u0107\u0108\7k\2\2\u0108\u0109"+ - "\7q\2\2\u0109&\3\2\2\2\u010a\u010b\7r\2\2\u010b\u010c\7c\2\2\u010c\u010d"+ - "\7t\2\2\u010d\u010e\7g\2\2\u010e(\3\2\2\2\u010f\u0110\7t\2\2\u0110\u0111"+ - "\7g\2\2\u0111\u0112\7v\2\2\u0112\u0113\7q\2\2\u0113\u0114\7t\2\2\u0114"+ - "\u0115\7p\2\2\u0115\u0116\7g\2\2\u0116*\3\2\2\2\u0117\u0118\7k\2\2\u0118"+ - "\u0119\7p\2\2\u0119\u011a\7e\2\2\u011a\u011b\7n\2\2\u011b\u011c\7w\2\2"+ - "\u011c\u011d\7c\2\2\u011d,\3\2\2\2\u011e\u011f\7d\2\2\u011f\u0120\7k\2"+ - "\2\u0120\u0121\7d\2\2\u0121\u0122\7n\2\2\u0122\u0123\7k\2\2\u0123\u0124"+ - "\7q\2\2\u0124\u0125\7v\2\2\u0125\u0126\7g\2\2\u0126\u0127\7e\2\2\u0127"+ - "\u0128\7c\2\2\u0128.\3\2\2\2\u0129\u012a\7p\2\2\u012a\u012b\7c\2\2\u012b"+ - "\u012c\7q\2\2\u012c\60\3\2\2\2\u012d\u012e\7g\2\2\u012e\62\3\2\2\2\u012f"+ - "\u0130\7q\2\2\u0130\u0131\7w\2\2\u0131\64\3\2\2\2\u0132\u0133\7/\2\2\u0133"+ - "\66\3\2\2\2\u0134\u0135\7-\2\2\u01358\3\2\2\2\u0136\u0137\7,\2\2\u0137"+ - ":\3\2\2\2\u0138\u0139\7\61\2\2\u0139<\3\2\2\2\u013a\u013b\7\'\2\2\u013b"+ - ">\3\2\2\2\u013c\u013d\7?\2\2\u013d@\3\2\2\2\u013e\u013f\7?\2\2\u013f\u0140"+ - "\7?\2\2\u0140B\3\2\2\2\u0141\u0142\7#\2\2\u0142\u0143\7?\2\2\u0143D\3"+ - "\2\2\2\u0144\u0145\7@\2\2\u0145F\3\2\2\2\u0146\u0147\7>\2\2\u0147H\3\2"+ - "\2\2\u0148\u0149\7>\2\2\u0149\u014a\7?\2\2\u014aJ\3\2\2\2\u014b\u014c"+ - "\7@\2\2\u014c\u014d\7?\2\2\u014dL\3\2\2\2\u014e\u014f\7-\2\2\u014f\u0150"+ - "\7-\2\2\u0150N\3\2\2\2\u0151\u0152\7/\2\2\u0152\u0153\7/\2\2\u0153P\3"+ - "\2\2\2\u0154\u0155\7>\2\2\u0155\u0156\7>\2\2\u0156R\3\2\2\2\u0157\u0158"+ - "\7@\2\2\u0158\u0159\7@\2\2\u0159T\3\2\2\2\u015a\u015b\7`\2\2\u015bV\3"+ - "\2\2\2\u015c\u015d\7~\2\2\u015dX\3\2\2\2\u015e\u015f\7\u0080\2\2\u015f"+ - "Z\3\2\2\2\u0160\u0161\7/\2\2\u0161\u0162\7/\2\2\u0162\u0163\7@\2\2\u0163"+ - "\\\3\2\2\2\u0164\u0165\7(\2\2\u0165^\3\2\2\2\u0166\u0167\7-\2\2\u0167"+ - "\u0168\7?\2\2\u0168`\3\2\2\2\u0169\u016a\7/\2\2\u016a\u016b\7?\2\2\u016b"+ - "b\3\2\2\2\u016c\u016d\7,\2\2\u016d\u016e\7?\2\2\u016ed\3\2\2\2\u016f\u0170"+ - "\7\61\2\2\u0170\u0171\7?\2\2\u0171f\3\2\2\2\u0172\u0175\5i\65\2\u0173"+ - "\u0175\5k\66\2\u0174\u0172\3\2\2\2\u0174\u0173\3\2\2\2\u0175h\3\2\2\2"+ - "\u0176\u0177\7x\2\2\u0177\u0178\7g\2\2\u0178\u0179\7t\2\2\u0179\u017a"+ - "\7f\2\2\u017a\u017b\7c\2\2\u017b\u017c\7f\2\2\u017c\u017d\7g\2\2\u017d"+ - "\u017e\7k\2\2\u017e\u017f\7t\2\2\u017f\u0180\7q\2\2\u0180j\3\2\2\2\u0181"+ - "\u0182\7h\2\2\u0182\u0183\7c\2\2\u0183\u0184\7n\2\2\u0184\u0185\7u\2\2"+ - "\u0185\u0186\7q\2\2\u0186l\3\2\2\2\u0187\u018a\7)\2\2\u0188\u018b\5u;"+ - "\2\u0189\u018b\n\2\2\2\u018a\u0188\3\2\2\2\u018a\u0189\3\2\2\2\u018b\u018c"+ - "\3\2\2\2\u018c\u018d\7)\2\2\u018dn\3\2\2\2\u018e\u018f\7^\2\2\u018f\u0193"+ - "\t\3\2\2\u0190\u0193\5s:\2\u0191\u0193\5q9\2\u0192\u018e\3\2\2\2\u0192"+ - "\u0190\3\2\2\2\u0192\u0191\3\2\2\2\u0193p\3\2\2\2\u0194\u0195\7^\2\2\u0195"+ - "\u0196\4\62\65\2\u0196\u0197\4\629\2\u0197\u019e\4\629\2\u0198\u0199\7"+ - "^\2\2\u0199\u019a\4\629\2\u019a\u019e\4\629\2\u019b\u019c\7^\2\2\u019c"+ - "\u019e\4\629\2\u019d\u0194\3\2\2\2\u019d\u0198\3\2\2\2\u019d\u019b\3\2"+ - "\2\2\u019er\3\2\2\2\u019f\u01a0\7^\2\2\u01a0\u01a1\7w\2\2\u01a1\u01a2"+ - "\5w<\2\u01a2\u01a3\5w<\2\u01a3\u01a4\5w<\2\u01a4\u01a5\5w<\2\u01a5t\3"+ - "\2\2\2\u01a6\u01aa\5o8\2\u01a7\u01a8\7^\2\2\u01a8\u01aa\7)\2\2\u01a9\u01a6"+ - "\3\2\2\2\u01a9\u01a7\3\2\2\2\u01aav\3\2\2\2\u01ab\u01ac\t\4\2\2\u01ac"+ - "x\3\2\2\2\u01ad\u01b2\7$\2\2\u01ae\u01b1\5o8\2\u01af\u01b1\13\2\2\2\u01b0"+ - "\u01ae\3\2\2\2\u01b0\u01af\3\2\2\2\u01b1\u01b4\3\2\2\2\u01b2\u01b3\3\2"+ - "\2\2\u01b2\u01b0\3\2\2\2\u01b3\u01b5\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b5"+ - "\u01b6\7$\2\2\u01b6z\3\2\2\2\u01b7\u01ba\5}?\2\u01b8\u01ba\7a\2\2\u01b9"+ - "\u01b7\3\2\2\2\u01b9\u01b8\3\2\2\2\u01ba\u01bf\3\2\2\2\u01bb\u01be\5}"+ - "?\2\u01bc\u01be\t\5\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01bc\3\2\2\2\u01be"+ - "\u01c1\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2\2\2\u01c0|\3\2\2\2"+ - "\u01c1\u01bf\3\2\2\2\u01c2\u01c3\t\6\2\2\u01c3~\3\2\2\2\u01c4\u01c6\5"+ - "\u0081A\2\u01c5\u01c4\3\2\2\2\u01c6\u01c7\3\2\2\2\u01c7\u01c5\3\2\2\2"+ - "\u01c7\u01c8\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u01cd\7\60\2\2\u01ca\u01cc"+ - "\5\u0081A\2\u01cb\u01ca\3\2\2\2\u01cc\u01cf\3\2\2\2\u01cd\u01cb\3\2\2"+ - "\2\u01cd\u01ce\3\2\2\2\u01ce\u01d7\3\2\2\2\u01cf\u01cd\3\2\2\2\u01d0\u01d2"+ - "\7\60\2\2\u01d1\u01d3\5\u0081A\2\u01d2\u01d1\3\2\2\2\u01d3\u01d4\3\2\2"+ - "\2\u01d4\u01d2\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d5\u01d7\3\2\2\2\u01d6\u01c5"+ - "\3\2\2\2\u01d6\u01d0\3\2\2\2\u01d7\u0080\3\2\2\2\u01d8\u01d9\t\7\2\2\u01d9"+ - "\u0082\3\2\2\2\u01da\u01dc\5\u0081A\2\u01db\u01da\3\2\2\2\u01dc\u01dd"+ - "\3\2\2\2\u01dd\u01db\3\2\2\2\u01dd\u01de\3\2\2\2\u01de\u01df\3\2\2\2\u01df"+ - "\u01e0\bB\2\2\u01e0\u0084\3\2\2\2\u01e1\u01e2\7\62\2\2\u01e2\u01e3\t\b"+ - "\2\2\u01e3\u01f1\5\u0087D\2\u01e4\u01ef\5\u0087D\2\u01e5\u01ed\5\u0087"+ - "D\2\u01e6\u01eb\5\u0087D\2\u01e7\u01e9\5\u0087D\2\u01e8\u01ea\5\u0087"+ - "D\2\u01e9\u01e8\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01ec\3\2\2\2\u01eb"+ - "\u01e7\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ee\3\2\2\2\u01ed\u01e6\3\2"+ - "\2\2\u01ed\u01ee\3\2\2\2\u01ee\u01f0\3\2\2\2\u01ef\u01e5\3\2\2\2\u01ef"+ - "\u01f0\3\2\2\2\u01f0\u01f2\3\2\2\2\u01f1\u01e4\3\2\2\2\u01f1\u01f2\3\2"+ - "\2\2\u01f2\u0086\3\2\2\2\u01f3\u01f6\5\u0081A\2\u01f4\u01f6\t\t\2\2\u01f5"+ - "\u01f3\3\2\2\2\u01f5\u01f4\3\2\2\2\u01f6\u0088\3\2\2\2\u01f7\u01f8\7\61"+ - "\2\2\u01f8\u01f9\7,\2\2\u01f9\u01fd\3\2\2\2\u01fa\u01fc\13\2\2\2\u01fb"+ - "\u01fa\3\2\2\2\u01fc\u01ff\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fd\u01fb\3\2"+ - "\2\2\u01fe\u0200\3\2\2\2\u01ff\u01fd\3\2\2\2\u0200\u0201\7,\2\2\u0201"+ - "\u0202\7\61\2\2\u0202\u0203\3\2\2\2\u0203\u0204\bE\3\2\u0204\u008a\3\2"+ - "\2\2\u0205\u0206\7\61\2\2\u0206\u0207\7\61\2\2\u0207\u020b\3\2\2\2\u0208"+ - "\u020a\13\2\2\2\u0209\u0208\3\2\2\2\u020a\u020d\3\2\2\2\u020b\u020c\3"+ - "\2\2\2\u020b\u0209\3\2\2\2\u020c\u020e\3\2\2\2\u020d\u020b\3\2\2\2\u020e"+ - "\u020f\7\f\2\2\u020f\u0210\3\2\2\2\u0210\u0211\bF\3\2\u0211\u008c\3\2"+ - "\2\2\u0212\u0214\t\n\2\2\u0213\u0212\3\2\2\2\u0214\u0215\3\2\2\2\u0215"+ - "\u0213\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0217\3\2\2\2\u0217\u0218\bG"+ - "\4\2\u0218\u008e\3\2\2\2\34\2\u00bf\u0174\u018a\u0192\u019d\u01a9\u01b0"+ - "\u01b2\u01b9\u01bd\u01bf\u01c7\u01cd\u01d4\u01d6\u01dd\u01e9\u01eb\u01ed"+ - "\u01ef\u01f1\u01f5\u01fd\u020b\u0215\5\3B\2\2\3\2\b\2\2"; + "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ + "\tI\4J\tJ\4K\tK\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3"+ + "\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+ + "\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5"+ + "\b\u00c8\n\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3"+ + "\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16"+ + "\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20"+ + "\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\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\24\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\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ + "\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\31\3\31\3\32\3\32\3\32\3\33"+ + "\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\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\60\3\60\3\60\3\61\3\61\3\61\3"+ + "\62\3\62\3\62\3\63\3\63\3\63\3\64\3\64\5\64\u017d\n\64\3\65\3\65\3\65"+ + "\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66"+ + "\3\67\3\67\3\67\5\67\u0193\n\67\3\67\3\67\38\38\38\38\58\u019b\n8\39\3"+ + "9\39\39\39\39\39\39\39\59\u01a6\n9\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\5;\u01b2"+ + "\n;\3<\3<\3=\3=\3=\7=\u01b9\n=\f=\16=\u01bc\13=\3=\3=\3>\3>\5>\u01c2\n"+ + ">\3>\3>\7>\u01c6\n>\f>\16>\u01c9\13>\3?\3?\3@\6@\u01ce\n@\r@\16@\u01cf"+ + "\3@\3@\7@\u01d4\n@\f@\16@\u01d7\13@\3@\3@\6@\u01db\n@\r@\16@\u01dc\5@"+ + "\u01df\n@\3A\3A\3B\6B\u01e4\nB\rB\16B\u01e5\3B\3B\3C\3C\3C\3C\3C\3C\3"+ + "C\3C\5C\u01f2\nC\5C\u01f4\nC\5C\u01f6\nC\5C\u01f8\nC\5C\u01fa\nC\3D\3"+ + "D\5D\u01fe\nD\3E\3E\3E\3E\7E\u0204\nE\fE\16E\u0207\13E\3E\3E\3E\3E\3E"+ + "\3F\3F\3F\3F\7F\u0212\nF\fF\16F\u0215\13F\3F\5F\u0218\nF\3F\3F\3G\6G\u021d"+ + "\nG\rG\16G\u021e\3G\3G\3H\3H\3I\3I\3J\3J\3K\3K\5\u01ba\u0205\u0213\2L"+ + "\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20"+ + "\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37"+ + "= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o"+ + "\2q\2s\2u\2w\2y9{:}\2\177;\u0081\2\u0083<\u0085=\u0087\2\u0089>\u008b"+ + "?\u008d@\u008fA\u0091B\u0093C\u0095D\3\2\f\3\2))\t\2$$^^ddhhppttvv\5\2"+ + "\62;CHch\4\2\62;aa\4\2C\\c|\3\2\62;\4\2ZZzz\4\2CHch\3\3\f\f\5\2\13\f\17"+ + "\17\"\"\2\u0240\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3"+ + "\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2"+ + "\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3"+ + "\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2"+ + "\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2"+ + "9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3"+ + "\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2"+ + "\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2"+ + "_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3"+ + "\2\2\2\2m\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2\177\3\2\2\2\2\u0083\3\2\2\2"+ + "\2\u0085\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f"+ + "\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\3\u0097\3\2\2"+ + "\2\5\u0099\3\2\2\2\7\u009b\3\2\2\2\t\u009d\3\2\2\2\13\u009f\3\2\2\2\r"+ + "\u00a1\3\2\2\2\17\u00c7\3\2\2\2\21\u00c9\3\2\2\2\23\u00ce\3\2\2\2\25\u00d7"+ + "\3\2\2\2\27\u00dc\3\2\2\2\31\u00df\3\2\2\2\33\u00e5\3\2\2\2\35\u00eb\3"+ + "\2\2\2\37\u00f2\3\2\2\2!\u00fb\3\2\2\2#\u0103\3\2\2\2%\u0108\3\2\2\2\'"+ + "\u0112\3\2\2\2)\u0117\3\2\2\2+\u011f\3\2\2\2-\u0126\3\2\2\2/\u0131\3\2"+ + "\2\2\61\u0135\3\2\2\2\63\u0137\3\2\2\2\65\u013a\3\2\2\2\67\u013c\3\2\2"+ + "\29\u013e\3\2\2\2;\u0140\3\2\2\2=\u0142\3\2\2\2?\u0144\3\2\2\2A\u0146"+ + "\3\2\2\2C\u0149\3\2\2\2E\u014c\3\2\2\2G\u014e\3\2\2\2I\u0150\3\2\2\2K"+ + "\u0153\3\2\2\2M\u0156\3\2\2\2O\u0159\3\2\2\2Q\u015c\3\2\2\2S\u015f\3\2"+ + "\2\2U\u0162\3\2\2\2W\u0164\3\2\2\2Y\u0166\3\2\2\2[\u0168\3\2\2\2]\u016c"+ + "\3\2\2\2_\u016e\3\2\2\2a\u0171\3\2\2\2c\u0174\3\2\2\2e\u0177\3\2\2\2g"+ + "\u017c\3\2\2\2i\u017e\3\2\2\2k\u0189\3\2\2\2m\u018f\3\2\2\2o\u019a\3\2"+ + "\2\2q\u01a5\3\2\2\2s\u01a7\3\2\2\2u\u01b1\3\2\2\2w\u01b3\3\2\2\2y\u01b5"+ + "\3\2\2\2{\u01c1\3\2\2\2}\u01ca\3\2\2\2\177\u01de\3\2\2\2\u0081\u01e0\3"+ + "\2\2\2\u0083\u01e3\3\2\2\2\u0085\u01e9\3\2\2\2\u0087\u01fd\3\2\2\2\u0089"+ + "\u01ff\3\2\2\2\u008b\u020d\3\2\2\2\u008d\u021c\3\2\2\2\u008f\u0222\3\2"+ + "\2\2\u0091\u0224\3\2\2\2\u0093\u0226\3\2\2\2\u0095\u0228\3\2\2\2\u0097"+ + "\u0098\7*\2\2\u0098\4\3\2\2\2\u0099\u009a\7+\2\2\u009a\6\3\2\2\2\u009b"+ + "\u009c\7]\2\2\u009c\b\3\2\2\2\u009d\u009e\7_\2\2\u009e\n\3\2\2\2\u009f"+ + "\u00a0\7}\2\2\u00a0\f\3\2\2\2\u00a1\u00a2\7\177\2\2\u00a2\16\3\2\2\2\u00a3"+ + "\u00a4\7t\2\2\u00a4\u00a5\7g\2\2\u00a5\u00a6\7c\2\2\u00a6\u00c8\7n\2\2"+ + "\u00a7\u00a8\7k\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7v\2\2\u00aa\u00ab"+ + "\7g\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7t\2\2\u00ad\u00c8\7q\2\2\u00ae"+ + "\u00af\7x\2\2\u00af\u00b0\7c\2\2\u00b0\u00b1\7|\2\2\u00b1\u00b2\7k\2\2"+ + "\u00b2\u00c8\7q\2\2\u00b3\u00b4\7n\2\2\u00b4\u00b5\7q\2\2\u00b5\u00b6"+ + "\7i\2\2\u00b6\u00b7\7k\2\2\u00b7\u00b8\7e\2\2\u00b8\u00c8\7q\2\2\u00b9"+ + "\u00ba\7e\2\2\u00ba\u00bb\7c\2\2\u00bb\u00bc\7f\2\2\u00bc\u00bd\7g\2\2"+ + "\u00bd\u00be\7k\2\2\u00be\u00c8\7c\2\2\u00bf\u00c0\7e\2\2\u00c0\u00c1"+ + "\7c\2\2\u00c1\u00c2\7t\2\2\u00c2\u00c3\7c\2\2\u00c3\u00c4\7e\2\2\u00c4"+ + "\u00c5\7v\2\2\u00c5\u00c6\7g\2\2\u00c6\u00c8\7t\2\2\u00c7\u00a3\3\2\2"+ + "\2\u00c7\u00a7\3\2\2\2\u00c7\u00ae\3\2\2\2\u00c7\u00b3\3\2\2\2\u00c7\u00b9"+ + "\3\2\2\2\u00c7\u00bf\3\2\2\2\u00c8\20\3\2\2\2\u00c9\u00ca\7h\2\2\u00ca"+ + "\u00cb\7c\2\2\u00cb\u00cc\7e\2\2\u00cc\u00cd\7c\2\2\u00cd\22\3\2\2\2\u00ce"+ + "\u00cf\7g\2\2\u00cf\u00d0\7p\2\2\u00d0\u00d1\7s\2\2\u00d1\u00d2\7w\2\2"+ + "\u00d2\u00d3\7c\2\2\u00d3\u00d4\7p\2\2\u00d4\u00d5\7v\2\2\u00d5\u00d6"+ + "\7q\2\2\u00d6\24\3\2\2\2\u00d7\u00d8\7r\2\2\u00d8\u00d9\7c\2\2\u00d9\u00da"+ + "\7t\2\2\u00da\u00db\7c\2\2\u00db\26\3\2\2\2\u00dc\u00dd\7u\2\2\u00dd\u00de"+ + "\7g\2\2\u00de\30\3\2\2\2\u00df\u00e0\7u\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2"+ + "\7p\2\2\u00e2\u00e3\7c\2\2\u00e3\u00e4\7q\2\2\u00e4\32\3\2\2\2\u00e5\u00e6"+ + "\7e\2\2\u00e6\u00e7\7q\2\2\u00e7\u00e8\7p\2\2\u00e8\u00e9\7u\2\2\u00e9"+ + "\u00ea\7v\2\2\u00ea\34\3\2\2\2\u00eb\u00ec\7h\2\2\u00ec\u00ed\7w\2\2\u00ed"+ + "\u00ee\7p\2\2\u00ee\u00ef\7e\2\2\u00ef\u00f0\7c\2\2\u00f0\u00f1\7q\2\2"+ + "\u00f1\36\3\2\2\2\u00f2\u00f3\7r\2\2\u00f3\u00f4\7t\2\2\u00f4\u00f5\7"+ + "q\2\2\u00f5\u00f6\7i\2\2\u00f6\u00f7\7t\2\2\u00f7\u00f8\7c\2\2\u00f8\u00f9"+ + "\7o\2\2\u00f9\u00fa\7c\2\2\u00fa \3\2\2\2\u00fb\u00fc\7g\2\2\u00fc\u00fd"+ + "\7u\2\2\u00fd\u00fe\7e\2\2\u00fe\u00ff\7q\2\2\u00ff\u0100\7n\2\2\u0100"+ + "\u0101\7j\2\2\u0101\u0102\7c\2\2\u0102\"\3\2\2\2\u0103\u0104\7e\2\2\u0104"+ + "\u0105\7c\2\2\u0105\u0106\7u\2\2\u0106\u0107\7q\2\2\u0107$\3\2\2\2\u0108"+ + "\u0109\7e\2\2\u0109\u010a\7q\2\2\u010a\u010b\7p\2\2\u010b\u010c\7v\2\2"+ + "\u010c\u010d\7t\2\2\u010d\u010e\7c\2\2\u010e\u010f\7t\2\2\u010f\u0110"+ + "\7k\2\2\u0110\u0111\7q\2\2\u0111&\3\2\2\2\u0112\u0113\7r\2\2\u0113\u0114"+ + "\7c\2\2\u0114\u0115\7t\2\2\u0115\u0116\7g\2\2\u0116(\3\2\2\2\u0117\u0118"+ + "\7t\2\2\u0118\u0119\7g\2\2\u0119\u011a\7v\2\2\u011a\u011b\7q\2\2\u011b"+ + "\u011c\7t\2\2\u011c\u011d\7p\2\2\u011d\u011e\7g\2\2\u011e*\3\2\2\2\u011f"+ + "\u0120\7k\2\2\u0120\u0121\7p\2\2\u0121\u0122\7e\2\2\u0122\u0123\7n\2\2"+ + "\u0123\u0124\7w\2\2\u0124\u0125\7c\2\2\u0125,\3\2\2\2\u0126\u0127\7d\2"+ + "\2\u0127\u0128\7k\2\2\u0128\u0129\7d\2\2\u0129\u012a\7n\2\2\u012a\u012b"+ + "\7k\2\2\u012b\u012c\7q\2\2\u012c\u012d\7v\2\2\u012d\u012e\7g\2\2\u012e"+ + "\u012f\7e\2\2\u012f\u0130\7c\2\2\u0130.\3\2\2\2\u0131\u0132\7p\2\2\u0132"+ + "\u0133\7c\2\2\u0133\u0134\7q\2\2\u0134\60\3\2\2\2\u0135\u0136\7g\2\2\u0136"+ + "\62\3\2\2\2\u0137\u0138\7q\2\2\u0138\u0139\7w\2\2\u0139\64\3\2\2\2\u013a"+ + "\u013b\7/\2\2\u013b\66\3\2\2\2\u013c\u013d\7-\2\2\u013d8\3\2\2\2\u013e"+ + "\u013f\7,\2\2\u013f:\3\2\2\2\u0140\u0141\7\61\2\2\u0141<\3\2\2\2\u0142"+ + "\u0143\7\'\2\2\u0143>\3\2\2\2\u0144\u0145\7?\2\2\u0145@\3\2\2\2\u0146"+ + "\u0147\7?\2\2\u0147\u0148\7?\2\2\u0148B\3\2\2\2\u0149\u014a\7#\2\2\u014a"+ + "\u014b\7?\2\2\u014bD\3\2\2\2\u014c\u014d\7@\2\2\u014dF\3\2\2\2\u014e\u014f"+ + "\7>\2\2\u014fH\3\2\2\2\u0150\u0151\7>\2\2\u0151\u0152\7?\2\2\u0152J\3"+ + "\2\2\2\u0153\u0154\7@\2\2\u0154\u0155\7?\2\2\u0155L\3\2\2\2\u0156\u0157"+ + "\7-\2\2\u0157\u0158\7-\2\2\u0158N\3\2\2\2\u0159\u015a\7/\2\2\u015a\u015b"+ + "\7/\2\2\u015bP\3\2\2\2\u015c\u015d\7>\2\2\u015d\u015e\7>\2\2\u015eR\3"+ + "\2\2\2\u015f\u0160\7@\2\2\u0160\u0161\7@\2\2\u0161T\3\2\2\2\u0162\u0163"+ + "\7`\2\2\u0163V\3\2\2\2\u0164\u0165\7~\2\2\u0165X\3\2\2\2\u0166\u0167\7"+ + "\u0080\2\2\u0167Z\3\2\2\2\u0168\u0169\7/\2\2\u0169\u016a\7/\2\2\u016a"+ + "\u016b\7@\2\2\u016b\\\3\2\2\2\u016c\u016d\7(\2\2\u016d^\3\2\2\2\u016e"+ + "\u016f\7-\2\2\u016f\u0170\7?\2\2\u0170`\3\2\2\2\u0171\u0172\7/\2\2\u0172"+ + "\u0173\7?\2\2\u0173b\3\2\2\2\u0174\u0175\7,\2\2\u0175\u0176\7?\2\2\u0176"+ + "d\3\2\2\2\u0177\u0178\7\61\2\2\u0178\u0179\7?\2\2\u0179f\3\2\2\2\u017a"+ + "\u017d\5i\65\2\u017b\u017d\5k\66\2\u017c\u017a\3\2\2\2\u017c\u017b\3\2"+ + "\2\2\u017dh\3\2\2\2\u017e\u017f\7x\2\2\u017f\u0180\7g\2\2\u0180\u0181"+ + "\7t\2\2\u0181\u0182\7f\2\2\u0182\u0183\7c\2\2\u0183\u0184\7f\2\2\u0184"+ + "\u0185\7g\2\2\u0185\u0186\7k\2\2\u0186\u0187\7t\2\2\u0187\u0188\7q\2\2"+ + "\u0188j\3\2\2\2\u0189\u018a\7h\2\2\u018a\u018b\7c\2\2\u018b\u018c\7n\2"+ + "\2\u018c\u018d\7u\2\2\u018d\u018e\7q\2\2\u018el\3\2\2\2\u018f\u0192\7"+ + ")\2\2\u0190\u0193\5u;\2\u0191\u0193\n\2\2\2\u0192\u0190\3\2\2\2\u0192"+ + "\u0191\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\7)\2\2\u0195n\3\2\2\2\u0196"+ + "\u0197\7^\2\2\u0197\u019b\t\3\2\2\u0198\u019b\5s:\2\u0199\u019b\5q9\2"+ + "\u019a\u0196\3\2\2\2\u019a\u0198\3\2\2\2\u019a\u0199\3\2\2\2\u019bp\3"+ + "\2\2\2\u019c\u019d\7^\2\2\u019d\u019e\4\62\65\2\u019e\u019f\4\629\2\u019f"+ + "\u01a6\4\629\2\u01a0\u01a1\7^\2\2\u01a1\u01a2\4\629\2\u01a2\u01a6\4\62"+ + "9\2\u01a3\u01a4\7^\2\2\u01a4\u01a6\4\629\2\u01a5\u019c\3\2\2\2\u01a5\u01a0"+ + "\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a6r\3\2\2\2\u01a7\u01a8\7^\2\2\u01a8\u01a9"+ + "\7w\2\2\u01a9\u01aa\5w<\2\u01aa\u01ab\5w<\2\u01ab\u01ac\5w<\2\u01ac\u01ad"+ + "\5w<\2\u01adt\3\2\2\2\u01ae\u01b2\5o8\2\u01af\u01b0\7^\2\2\u01b0\u01b2"+ + "\7)\2\2\u01b1\u01ae\3\2\2\2\u01b1\u01af\3\2\2\2\u01b2v\3\2\2\2\u01b3\u01b4"+ + "\t\4\2\2\u01b4x\3\2\2\2\u01b5\u01ba\7$\2\2\u01b6\u01b9\5o8\2\u01b7\u01b9"+ + "\13\2\2\2\u01b8\u01b6\3\2\2\2\u01b8\u01b7\3\2\2\2\u01b9\u01bc\3\2\2\2"+ + "\u01ba\u01bb\3\2\2\2\u01ba\u01b8\3\2\2\2\u01bb\u01bd\3\2\2\2\u01bc\u01ba"+ + "\3\2\2\2\u01bd\u01be\7$\2\2\u01bez\3\2\2\2\u01bf\u01c2\5}?\2\u01c0\u01c2"+ + "\7a\2\2\u01c1\u01bf\3\2\2\2\u01c1\u01c0\3\2\2\2\u01c2\u01c7\3\2\2\2\u01c3"+ + "\u01c6\5}?\2\u01c4\u01c6\t\5\2\2\u01c5\u01c3\3\2\2\2\u01c5\u01c4\3\2\2"+ + "\2\u01c6\u01c9\3\2\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8|"+ + "\3\2\2\2\u01c9\u01c7\3\2\2\2\u01ca\u01cb\t\6\2\2\u01cb~\3\2\2\2\u01cc"+ + "\u01ce\5\u0081A\2\u01cd\u01cc\3\2\2\2\u01ce\u01cf\3\2\2\2\u01cf\u01cd"+ + "\3\2\2\2\u01cf\u01d0\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d5\7\60\2\2"+ + "\u01d2\u01d4\5\u0081A\2\u01d3\u01d2\3\2\2\2\u01d4\u01d7\3\2\2\2\u01d5"+ + "\u01d3\3\2\2\2\u01d5\u01d6\3\2\2\2\u01d6\u01df\3\2\2\2\u01d7\u01d5\3\2"+ + "\2\2\u01d8\u01da\7\60\2\2\u01d9\u01db\5\u0081A\2\u01da\u01d9\3\2\2\2\u01db"+ + "\u01dc\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01df\3\2"+ + "\2\2\u01de\u01cd\3\2\2\2\u01de\u01d8\3\2\2\2\u01df\u0080\3\2\2\2\u01e0"+ + "\u01e1\t\7\2\2\u01e1\u0082\3\2\2\2\u01e2\u01e4\5\u0081A\2\u01e3\u01e2"+ + "\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e3\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6"+ + "\u01e7\3\2\2\2\u01e7\u01e8\bB\2\2\u01e8\u0084\3\2\2\2\u01e9\u01ea\7\62"+ + "\2\2\u01ea\u01eb\t\b\2\2\u01eb\u01f9\5\u0087D\2\u01ec\u01f7\5\u0087D\2"+ + "\u01ed\u01f5\5\u0087D\2\u01ee\u01f3\5\u0087D\2\u01ef\u01f1\5\u0087D\2"+ + "\u01f0\u01f2\5\u0087D\2\u01f1\u01f0\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2"+ + "\u01f4\3\2\2\2\u01f3\u01ef\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f6\3\2"+ + "\2\2\u01f5\u01ee\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f8\3\2\2\2\u01f7"+ + "\u01ed\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8\u01fa\3\2\2\2\u01f9\u01ec\3\2"+ + "\2\2\u01f9\u01fa\3\2\2\2\u01fa\u0086\3\2\2\2\u01fb\u01fe\5\u0081A\2\u01fc"+ + "\u01fe\t\t\2\2\u01fd\u01fb\3\2\2\2\u01fd\u01fc\3\2\2\2\u01fe\u0088\3\2"+ + "\2\2\u01ff\u0200\7\61\2\2\u0200\u0201\7,\2\2\u0201\u0205\3\2\2\2\u0202"+ + "\u0204\13\2\2\2\u0203\u0202\3\2\2\2\u0204\u0207\3\2\2\2\u0205\u0206\3"+ + "\2\2\2\u0205\u0203\3\2\2\2\u0206\u0208\3\2\2\2\u0207\u0205\3\2\2\2\u0208"+ + "\u0209\7,\2\2\u0209\u020a\7\61\2\2\u020a\u020b\3\2\2\2\u020b\u020c\bE"+ + "\3\2\u020c\u008a\3\2\2\2\u020d\u020e\7\61\2\2\u020e\u020f\7\61\2\2\u020f"+ + "\u0213\3\2\2\2\u0210\u0212\13\2\2\2\u0211\u0210\3\2\2\2\u0212\u0215\3"+ + "\2\2\2\u0213\u0214\3\2\2\2\u0213\u0211\3\2\2\2\u0214\u0217\3\2\2\2\u0215"+ + "\u0213\3\2\2\2\u0216\u0218\t\n\2\2\u0217\u0216\3\2\2\2\u0218\u0219\3\2"+ + "\2\2\u0219\u021a\bF\3\2\u021a\u008c\3\2\2\2\u021b\u021d\t\13\2\2\u021c"+ + "\u021b\3\2\2\2\u021d\u021e\3\2\2\2\u021e\u021c\3\2\2\2\u021e\u021f\3\2"+ + "\2\2\u021f\u0220\3\2\2\2\u0220\u0221\bG\3\2\u0221\u008e\3\2\2\2\u0222"+ + "\u0223\7\60\2\2\u0223\u0090\3\2\2\2\u0224\u0225\7.\2\2\u0225\u0092\3\2"+ + "\2\2\u0226\u0227\7=\2\2\u0227\u0094\3\2\2\2\u0228\u0229\7<\2\2\u0229\u0096"+ + "\3\2\2\2\35\2\u00c7\u017c\u0192\u019a\u01a5\u01b1\u01b8\u01ba\u01c1\u01c5"+ + "\u01c7\u01cf\u01d5\u01dc\u01de\u01e5\u01f1\u01f3\u01f5\u01f7\u01f9\u01fd"+ + "\u0205\u0213\u0217\u021e\4\3B\2\2\3\2"; 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/PortugolParser.java b/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/antlr4/PortugolParser.java index 6a5b61b6d..a4bad6f25 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 @@ -17,19 +17,19 @@ public class PortugolParser extends Parser { protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache(); public static final int - T__0=1, T__1=2, T__2=3, T__3=4, ABRE_PARENTESES=5, FECHA_PARENTESES=6, - ABRE_COLCHETES=7, FECHA_COLCHETES=8, ABRE_CHAVES=9, FECHA_CHAVES=10, TIPO=11, - FACA=12, ENQUANTO=13, PARA=14, SE=15, SENAO=16, CONSTANTE=17, FUNCAO=18, - PROGRAMA=19, ESCOLHA=20, CASO=21, CONTRARIO=22, PARE=23, RETORNE=24, INCLUA=25, - BIBLIOTECA=26, OP_NAO=27, OP_E_LOGICO=28, OP_OU_LOGICO=29, OP_SUBTRACAO=30, - OP_ADICAO=31, OP_MULTIPLICACAO=32, OP_DIVISAO=33, OP_MOD=34, OP_ATRIBUICAO=35, - OP_IGUALDADE=36, OP_DIFERENCA=37, OP_MAIOR=38, OP_MENOR=39, OP_MENOR_IGUAL=40, - OP_MAIOR_IGUAL=41, OP_INCREMENTO_UNARIO=42, OP_DECREMENTO_UNARIO=43, OP_SHIFT_LEFT=44, - OP_SHIFT_RIGHT=45, OP_XOR=46, OP_OU_BITWISE=47, OP_NOT_BITWISE=48, OP_ALIAS_BIBLIOTECA=49, - E_COMERCIAL=50, OP_MAIS_IGUAL=51, OP_MENOS_IGUAL=52, OP_MULTIPLICACAO_IGUAL=53, - OP_DIVISAO_IGUAL=54, LOGICO=55, VERDADEIRO=56, FALSO=57, CARACTER=58, - STRING=59, ID=60, REAL=61, INT=62, HEXADECIMAL=63, COMENTARIO=64, COMENTARIO_SIMPLES=65, - WS=66; + ABRE_PARENTESES=1, FECHA_PARENTESES=2, ABRE_COLCHETES=3, FECHA_COLCHETES=4, + ABRE_CHAVES=5, FECHA_CHAVES=6, TIPO=7, FACA=8, ENQUANTO=9, PARA=10, SE=11, + SENAO=12, CONSTANTE=13, FUNCAO=14, PROGRAMA=15, ESCOLHA=16, CASO=17, CONTRARIO=18, + PARE=19, RETORNE=20, INCLUA=21, BIBLIOTECA=22, OP_NAO=23, OP_E_LOGICO=24, + OP_OU_LOGICO=25, OP_SUBTRACAO=26, OP_ADICAO=27, OP_MULTIPLICACAO=28, OP_DIVISAO=29, + OP_MOD=30, OP_ATRIBUICAO=31, OP_IGUALDADE=32, OP_DIFERENCA=33, OP_MAIOR=34, + OP_MENOR=35, OP_MENOR_IGUAL=36, OP_MAIOR_IGUAL=37, OP_INCREMENTO_UNARIO=38, + OP_DECREMENTO_UNARIO=39, OP_SHIFT_LEFT=40, OP_SHIFT_RIGHT=41, OP_XOR=42, + OP_OU_BITWISE=43, OP_NOT_BITWISE=44, OP_ALIAS_BIBLIOTECA=45, E_COMERCIAL=46, + OP_MAIS_IGUAL=47, OP_MENOS_IGUAL=48, OP_MULTIPLICACAO_IGUAL=49, OP_DIVISAO_IGUAL=50, + LOGICO=51, VERDADEIRO=52, FALSO=53, CARACTER=54, STRING=55, ID=56, REAL=57, + INT=58, HEXADECIMAL=59, COMENTARIO=60, COMENTARIO_SIMPLES=61, WS=62, PONTO=63, + VIRGULA=64, PONTOVIRGULA=65, DOISPONTOS=66; public static final int RULE_arquivo = 0, RULE_inclusaoBiblioteca = 1, RULE_listaDeclaracoes = 2, RULE_declaracao = 3, RULE_declaracaoVariavel = 4, RULE_declaracaoMatriz = 5, @@ -59,30 +59,31 @@ private static String[] makeRuleNames() { private static String[] makeLiteralNames() { return new String[] { - null, "','", "';'", "':'", "'.'", "'('", "')'", "'['", "']'", "'{'", - "'}'", null, "'faca'", "'enquanto'", "'para'", "'se'", "'senao'", "'const'", - "'funcao'", "'programa'", "'escolha'", "'caso'", "'contrario'", "'pare'", - "'retorne'", "'inclua'", "'biblioteca'", "'nao'", "'e'", "'ou'", "'-'", - "'+'", "'*'", "'/'", "'%'", "'='", "'=='", "'!='", "'>'", "'<'", "'<='", - "'>='", "'++'", "'--'", "'<<'", "'>>'", "'^'", "'|'", "'~'", "'-->'", - "'&'", "'+='", "'-='", "'*='", "'/='", null, "'verdadeiro'", "'falso'" + null, "'('", "')'", "'['", "']'", "'{'", "'}'", null, "'faca'", "'enquanto'", + "'para'", "'se'", "'senao'", "'const'", "'funcao'", "'programa'", "'escolha'", + "'caso'", "'contrario'", "'pare'", "'retorne'", "'inclua'", "'biblioteca'", + "'nao'", "'e'", "'ou'", "'-'", "'+'", "'*'", "'/'", "'%'", "'='", "'=='", + "'!='", "'>'", "'<'", "'<='", "'>='", "'++'", "'--'", "'<<'", "'>>'", + "'^'", "'|'", "'~'", "'-->'", "'&'", "'+='", "'-='", "'*='", "'/='", + null, "'verdadeiro'", "'falso'", null, null, null, null, null, null, + null, null, null, "'.'", "','", "';'", "':'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static String[] makeSymbolicNames() { return new String[] { - null, null, null, null, null, "ABRE_PARENTESES", "FECHA_PARENTESES", - "ABRE_COLCHETES", "FECHA_COLCHETES", "ABRE_CHAVES", "FECHA_CHAVES", "TIPO", - "FACA", "ENQUANTO", "PARA", "SE", "SENAO", "CONSTANTE", "FUNCAO", "PROGRAMA", - "ESCOLHA", "CASO", "CONTRARIO", "PARE", "RETORNE", "INCLUA", "BIBLIOTECA", - "OP_NAO", "OP_E_LOGICO", "OP_OU_LOGICO", "OP_SUBTRACAO", "OP_ADICAO", - "OP_MULTIPLICACAO", "OP_DIVISAO", "OP_MOD", "OP_ATRIBUICAO", "OP_IGUALDADE", - "OP_DIFERENCA", "OP_MAIOR", "OP_MENOR", "OP_MENOR_IGUAL", "OP_MAIOR_IGUAL", - "OP_INCREMENTO_UNARIO", "OP_DECREMENTO_UNARIO", "OP_SHIFT_LEFT", "OP_SHIFT_RIGHT", - "OP_XOR", "OP_OU_BITWISE", "OP_NOT_BITWISE", "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", - "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", - "LOGICO", "VERDADEIRO", "FALSO", "CARACTER", "STRING", "ID", "REAL", - "INT", "HEXADECIMAL", "COMENTARIO", "COMENTARIO_SIMPLES", "WS" + null, "ABRE_PARENTESES", "FECHA_PARENTESES", "ABRE_COLCHETES", "FECHA_COLCHETES", + "ABRE_CHAVES", "FECHA_CHAVES", "TIPO", "FACA", "ENQUANTO", "PARA", "SE", + "SENAO", "CONSTANTE", "FUNCAO", "PROGRAMA", "ESCOLHA", "CASO", "CONTRARIO", + "PARE", "RETORNE", "INCLUA", "BIBLIOTECA", "OP_NAO", "OP_E_LOGICO", "OP_OU_LOGICO", + "OP_SUBTRACAO", "OP_ADICAO", "OP_MULTIPLICACAO", "OP_DIVISAO", "OP_MOD", + "OP_ATRIBUICAO", "OP_IGUALDADE", "OP_DIFERENCA", "OP_MAIOR", "OP_MENOR", + "OP_MENOR_IGUAL", "OP_MAIOR_IGUAL", "OP_INCREMENTO_UNARIO", "OP_DECREMENTO_UNARIO", + "OP_SHIFT_LEFT", "OP_SHIFT_RIGHT", "OP_XOR", "OP_OU_BITWISE", "OP_NOT_BITWISE", + "OP_ALIAS_BIBLIOTECA", "E_COMERCIAL", "OP_MAIS_IGUAL", "OP_MENOS_IGUAL", + "OP_MULTIPLICACAO_IGUAL", "OP_DIVISAO_IGUAL", "LOGICO", "VERDADEIRO", + "FALSO", "CARACTER", "STRING", "ID", "REAL", "INT", "HEXADECIMAL", "COMENTARIO", + "COMENTARIO_SIMPLES", "WS", "PONTO", "VIRGULA", "PONTOVIRGULA", "DOISPONTOS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -304,6 +305,10 @@ public DeclaracaoContext declaracao(int i) { return getRuleContext(DeclaracaoContext.class,i); } public TerminalNode CONSTANTE() { return getToken(PortugolParser.CONSTANTE, 0); } + public List VIRGULA() { return getTokens(PortugolParser.VIRGULA); } + public TerminalNode VIRGULA(int i) { + return getToken(PortugolParser.VIRGULA, i); + } public ListaDeclaracoesContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -339,11 +344,11 @@ public final ListaDeclaracoesContext listaDeclaracoes() throws RecognitionExcept setState(105); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__0) { + while (_la==VIRGULA) { { { setState(101); - match(T__0); + match(VIRGULA); setState(102); declaracao(); } @@ -580,6 +585,10 @@ public InicializacaoArrayContext inicializacaoArray(int i) { return getRuleContext(InicializacaoArrayContext.class,i); } public TerminalNode FECHA_CHAVES() { return getToken(PortugolParser.FECHA_CHAVES, 0); } + public List VIRGULA() { return getTokens(PortugolParser.VIRGULA); } + public TerminalNode VIRGULA(int i) { + return getToken(PortugolParser.VIRGULA, i); + } public InicializacaoMatrizContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -605,11 +614,11 @@ public final InicializacaoMatrizContext inicializacaoMatriz() throws Recognition setState(139); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__0) { + while (_la==VIRGULA) { { { setState(135); - match(T__0); + match(VIRGULA); setState(136); inicializacaoArray(); } @@ -971,6 +980,10 @@ public List parametro() { public ParametroContext parametro(int i) { return getRuleContext(ParametroContext.class,i); } + public List VIRGULA() { return getTokens(PortugolParser.VIRGULA); } + public TerminalNode VIRGULA(int i) { + return getToken(PortugolParser.VIRGULA, i); + } public ListaParametrosContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -994,11 +1007,11 @@ public final ListaParametrosContext listaParametros() throws RecognitionExceptio setState(190); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__0) { + while (_la==VIRGULA) { { { setState(186); - match(T__0); + match(VIRGULA); setState(187); parametro(); } @@ -1720,6 +1733,10 @@ public final FacaEnquantoContext facaEnquanto() throws RecognitionException { public static class ParaContext extends ParserRuleContext { public TerminalNode PARA() { return getToken(PortugolParser.PARA, 0); } public TerminalNode ABRE_PARENTESES() { return getToken(PortugolParser.ABRE_PARENTESES, 0); } + public List PONTOVIRGULA() { return getTokens(PortugolParser.PONTOVIRGULA); } + public TerminalNode PONTOVIRGULA(int i) { + return getToken(PortugolParser.PONTOVIRGULA, i); + } public CondicaoContext condicao() { return getRuleContext(CondicaoContext.class,0); } @@ -1766,11 +1783,11 @@ public final ParaContext para() throws RecognitionException { } setState(276); - match(T__1); + match(PONTOVIRGULA); setState(277); condicao(); setState(278); - match(T__1); + match(PONTOVIRGULA); setState(279); incrementoPara(); setState(280); @@ -2118,6 +2135,7 @@ public final EscolhaContext escolha() throws RecognitionException { public static class CasoContext extends ParserRuleContext { public TerminalNode CASO() { return getToken(PortugolParser.CASO, 0); } + public TerminalNode DOISPONTOS() { return getToken(PortugolParser.DOISPONTOS, 0); } public TerminalNode CONTRARIO() { return getToken(PortugolParser.CONTRARIO, 0); } public ExpressaoContext expressao() { return getRuleContext(ExpressaoContext.class,0); @@ -2186,7 +2204,7 @@ public final CasoContext caso() throws RecognitionException { throw new NoViableAltException(this); } setState(324); - match(T__2); + match(DOISPONTOS); setState(339); _errHandler.sync(this); switch (_input.LA(1)) { @@ -3499,6 +3517,10 @@ public List atribuicao() { public AtribuicaoContext atribuicao(int i) { return getRuleContext(AtribuicaoContext.class,i); } + public List VIRGULA() { return getTokens(PortugolParser.VIRGULA); } + public TerminalNode VIRGULA(int i) { + return getToken(PortugolParser.VIRGULA, i); + } public ListaExpressoesContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -3542,11 +3564,11 @@ public final ListaExpressoesContext listaExpressoes() throws RecognitionExceptio setState(500); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__0) { + while (_la==VIRGULA) { { { setState(492); - match(T__0); + match(VIRGULA); setState(496); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { @@ -3590,6 +3612,7 @@ public final ListaExpressoesContext listaExpressoes() throws RecognitionExceptio public static class EscopoBibliotecaContext extends ParserRuleContext { public TerminalNode ID() { return getToken(PortugolParser.ID, 0); } + public TerminalNode PONTO() { return getToken(PortugolParser.PONTO, 0); } public EscopoBibliotecaContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -3611,7 +3634,7 @@ public final EscopoBibliotecaContext escopoBiblioteca() throws RecognitionExcept setState(503); match(ID); setState(504); - match(T__3); + match(PONTO); } } } @@ -3712,7 +3735,7 @@ private boolean expressao_sempred(ExpressaoContext _localctx, int predIndex) { "\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\4\4\2>>@@\3\2@A\2\u0241\2J\3\2\2\2\4[\3\2\2\2\6c\3\2"+ + "\64\668:<>@BDFH\2\4\4\2::<<\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"+ @@ -3720,151 +3743,152 @@ private boolean expressao_sempred(ExpressaoContext _localctx, int predIndex) { "\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\25\2\2KO\7\13\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\2TS\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"+ - "\f\2\2Z\3\3\2\2\2[\\\7\33\2\2\\]\7\34\2\2]`\7>\2\2^_\7\63\2\2_a\7>\2\2"+ - "`^\3\2\2\2`a\3\2\2\2a\5\3\2\2\2bd\7\23\2\2cb\3\2\2\2cd\3\2\2\2de\3\2\2"+ - "\2ef\7\r\2\2fk\5\b\5\2gh\7\3\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\t\2\2z|\5\20\t\2{z\3\2\2\2{|\3"+ - "\2\2\2|}\3\2\2\2}~\7\n\2\2~\u0080\7\t\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\n\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\13\2\2\u0088\u008d\5\26\f\2\u0089\u008a"+ - "\7\3\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\f\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\t\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\n\2\2\u009c\u009d\7%\2\2\u009d"+ + "\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\2TS\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\2Z\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\2e"+ + "f\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\2k"+ + "l\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\2"+ + "vw\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\13\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\f\2\2\u00a5\27\3\2\2\2\u00a6"+ - "\u00a7\t\2\2\2\u00a7\31\3\2\2\2\u00a8\u00aa\7\24\2\2\u00a9\u00ab\7\r\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\t\2\2\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\7\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\b\2\2\u00b2\u00b6"+ - "\7\13\2\2\u00b3\u00b5\5$\23\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\f\2\2\u00ba\33\3\2\2\2\u00bb\u00c0\5\36\20\2\u00bc"+ - "\u00bd\7\3\2\2\u00bd\u00bf\5\36\20\2\u00be\u00bc\3\2\2\2\u00bf\u00c2\3"+ + "\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"+ + "\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\r\2\2\u00c4\u00c6\7\64\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"+ + "\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\t\2\2\u00cd"+ - "\u00ce\7\n\2\2\u00ce!\3\2\2\2\u00cf\u00d0\7\t\2\2\u00d0\u00d1\7\n\2\2"+ - "\u00d1\u00d2\7\t\2\2\u00d2\u00d3\7\n\2\2\u00d3#\3\2\2\2\u00d4\u00e0\5"+ + "\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\65\2\2\u00e7\u00e8\5D#\2\u00e8"+ - "\u00f6\3\2\2\2\u00e9\u00ea\5D#\2\u00ea\u00eb\7\66\2\2\u00eb\u00ec\5D#"+ - "\2\u00ec\u00f6\3\2\2\2\u00ed\u00ee\5D#\2\u00ee\u00ef\7\67\2\2\u00ef\u00f0"+ - "\5D#\2\u00f0\u00f6\3\2\2\2\u00f1\u00f2\5D#\2\u00f2\u00f3\78\2\2\u00f3"+ + "%\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\32\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\21\2\2\u00fc\u00fd\7\7\2\2\u00fd\u00fe\5D#\2\u00fe"+ - "\u00ff\7\b\2\2\u00ff\u0102\5\64\33\2\u0100\u0101\7\22\2\2\u0101\u0103"+ + "\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\17\2\2\u0105\u0106\7\7\2\2\u0106\u0107\5D#\2\u0107\u0108\7\b"+ - "\2\2\u0108\u0109\5\64\33\2\u0109/\3\2\2\2\u010a\u010b\7\16\2\2\u010b\u010c"+ - "\5\64\33\2\u010c\u010d\7\17\2\2\u010d\u010e\7\7\2\2\u010e\u010f\5D#\2"+ - "\u010f\u0110\7\b\2\2\u0110\61\3\2\2\2\u0111\u0112\7\20\2\2\u0112\u0114"+ - "\7\7\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\7\4\2\2\u0117\u0118\58\35\2\u0118\u0119"+ - "\7\4\2\2\u0119\u011a\5:\36\2\u011a\u011b\7\b\2\2\u011b\u011c\5\64\33\2"+ - "\u011c\63\3\2\2\2\u011d\u0121\7\13\2\2\u011e\u0120\5$\23\2\u011f\u011e"+ + "\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\f\2\2\u0125\u0127\5$"+ + "\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"+ + "\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\26\2\2\u0135\u0136\7\7\2\2\u0136\u0137\5D#\2\u0137"+ - "\u0138\7\b\2\2\u0138\u013c\7\13\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\f\2\2\u0140=\3\2\2\2"+ - "\u0141\u0144\7\27\2\2\u0142\u0145\7\30\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\7\5\2\2\u0147"+ + "\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\13\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\f\2\2\u0155\u014a\3\2\2\2\u0155\u014d\3\2"+ + "\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\31\2\2\u015bA\3\2\2\2\u015c\u015d"+ - "\7\t\2\2\u015d\u015e\5D#\2\u015e\u015f\7\n\2\2\u015fC\3\2\2\2\u0160\u0162"+ + "\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\7\2\2\u0166\u0168\5F$"+ + "\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\b\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"+ + "\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 \2\2\u0178\u01ad\5D#"+ - "#\u0179\u017a\7!\2\2\u017a\u01ad\5D#\"\u017b\u017c\7\35\2\2\u017c\u01ad"+ - "\5D#!\u017d\u017e\7\62\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\3\2\2\u01a4\u01ad\7?\2\2\u01a5\u01ad\79\2\2\u01a6\u01ad\7<\2\2\u01a7"+ - "\u01ad\7=\2\2\u01a8\u01a9\7\7\2\2\u01a9\u01aa\5D#\2\u01aa\u01ab\7\b\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\"\2\2\u01b0\u01e5\5D#\34\u01b1\u01b2\f\32\2\2\u01b2\u01b3\7#"+ - "\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!\2\2\u01b9\u01e5\5D#"+ - "\31\u01ba\u01bb\f\27\2\2\u01bb\u01bc\7 \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\36\2\2\u01d1\u01e5\5D#\21\u01d2\u01d3\f\17\2\2"+ - "\u01d3\u01d4\7\37\2\2\u01d4\u01e5\5D#\20\u01d5\u01d6\f\16\2\2\u01d6\u01d7"+ - "\7\60\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\64\2\2\u01e0\u01e5\5D#\f\u01e1\u01e2"+ - "\f\n\2\2\u01e2\u01e3\7\61\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\7\3\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\u01f7G\3\2\2\2\u01f8\u01f6\3\2\2\2\u01f9\u01fa"+ - "\7>\2\2\u01fa\u01fb\7\6\2\2\u01fbI\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"; + "\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\3\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"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { 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 3c36beee0..fa8ac676d 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 @@ -99,8 +99,8 @@ public ErroSintatico traduzirErroParsing(RecognitionException erro, String mensa 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 "':'": return new ErroFaltaDoisPontos(linha, coluna); - case "';'": return new ErroTokenFaltando(linha, coluna, tokenEsperado); + 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); @@ -128,7 +128,7 @@ private ErroSintatico traduzirErrosPara(int linha, int coluna, RecognitionExcept { String contextoAtual = contextos.getContextoAtual(); if (contextoAtual.equals("para") && !tokensEsperados.isEmpty()) { - if (!tokensEsperados.get(0).equals("';'")) { + if (!tokensEsperados.get(0).equals("PONTOVIRGULA")) { boolean faltandoAbrirParenteses = tokensEsperados.contains("ABRE_PARENTESES"); boolean faltandoFecharParenteses = tokensEsperados.contains("FECHA_PARENTESES"); if (faltandoAbrirParenteses || faltandoFecharParenteses) { diff --git a/core/src/test/java/br/univali/portugol/nucleo/ResourceHandle.java b/core/src/test/java/br/univali/portugol/nucleo/ResourceHandle.java index ba8f8bc21..2c86f1db8 100644 --- a/core/src/test/java/br/univali/portugol/nucleo/ResourceHandle.java +++ b/core/src/test/java/br/univali/portugol/nucleo/ResourceHandle.java @@ -12,7 +12,7 @@ public final class ResourceHandle { private static final Logger LOGGER = Logger.getLogger(ResourceHandle.class.getName()); - private static final String CHARSET_PADRAO = "ISO-8859-1"; + private static final String CHARSET_PADRAO = "UTF-8"; public static String readInternalResourceFile(String path) throws IOException { @@ -55,6 +55,6 @@ private static String read(InputStream inputStream, String charset) throws IOExc throw ex; } - return reading.toString().replaceAll(System.lineSeparator(), Portugol.QUEBRA_DE_LINHA); + return reading.toString().replaceAll(System.lineSeparator(), "\n"); } } diff --git a/core/src/test/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErrosSintaticosTest.java b/core/src/test/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErrosSintaticosTest.java index 9069fbcb1..b6a882389 100644 --- a/core/src/test/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErrosSintaticosTest.java +++ b/core/src/test/java/br/univali/portugol/nucleo/analise/sintatica/erros/ErrosSintaticosTest.java @@ -27,7 +27,7 @@ public void testComandoParaIncompleto() throws Exception { Assert.assertEquals(1, analise.getErrosSintaticos().size()); ErroSintatico erro = analise.getErrosSintaticos().get(0); - Assert.assertTrue(erro instanceof ErroParaEsperaCondicao); + Assert.assertTrue(erro instanceof ErroParentesis); } @Test diff --git a/ide/build.gradle b/ide/build.gradle index be67e23ad..15540e90c 100644 --- a/ide/build.gradle +++ b/ide/build.gradle @@ -118,6 +118,10 @@ task debug(dependsOn: compileJava, type: JavaExec) { } } +test { + testLogging.showStandardStreams = true +} + def loadJvmArgs(def platform = null){ def jvmConfigFile = new File(project.projectDir, 'jvm.config') diff --git a/ide/src/main/java/br/univali/ps/dominio/PortugolHTMLHighlighter.java b/ide/src/main/java/br/univali/ps/dominio/PortugolHTMLHighlighter.java index a0454f8d3..bc82d85b7 100644 --- a/ide/src/main/java/br/univali/ps/dominio/PortugolHTMLHighlighter.java +++ b/ide/src/main/java/br/univali/ps/dominio/PortugolHTMLHighlighter.java @@ -108,6 +108,7 @@ public static String getText(String programaPortugol) .append(token.getText()) .append(""); break; + case PortugolLexer.COMENTARIO_SIMPLES: case PortugolLexer.COMENTARIO: htmlDoPortugol .append(""); } - } + } return htmlDoPortugol.toString(); } } diff --git a/ide/src/test/java/br/univali/ps/ui/editor/formatador/IntegracaoFormatadorTest.java b/ide/src/test/java/br/univali/ps/ui/editor/formatador/IntegracaoFormatadorTest.java index 1da9d1cd2..795280fdc 100644 --- a/ide/src/test/java/br/univali/ps/ui/editor/formatador/IntegracaoFormatadorTest.java +++ b/ide/src/test/java/br/univali/ps/ui/editor/formatador/IntegracaoFormatadorTest.java @@ -24,15 +24,21 @@ import br.univali.portugol.nucleo.asa.ASAPrograma; import br.univali.portugol.nucleo.asa.ExcecaoVisitaASA; import br.univali.portugol.nucleo.execucao.gerador.GeradorCodigoJava; +import br.univali.ps.dominio.PortugolHTMLHighlighter; +import br.univali.ps.ui.editor.Utils; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @author Elieser */ public class IntegracaoFormatadorTest { + private static final Logger LOGGER = Logger.getLogger(IntegracaoFormatadorTest.class.getName()); + @Test public void testaFormatacaoExemplos() throws FileNotFoundException, ErroCompilacao, ExcecaoVisitaASA, IOException, Exception { @@ -43,6 +49,17 @@ public void testaFormatacaoExemplos() throws FileNotFoundException, ErroCompilac testaExemplo(diretorio); } } + + @Test + public void testaFormatacaoAjuda() throws FileNotFoundException, ErroCompilacao, ExcecaoVisitaASA, IOException, Exception + { + File dirExemplos = new File("../ide/src/main/assets/ajuda/recursos/exemplos"); + + File[] diretorios = dirExemplos.listFiles(); + for (File diretorio : diretorios) { + testaAjuda(diretorio); + } + } private String geraCodigoJava(String codigoPortugol, long seed) throws Exception { @@ -96,5 +113,42 @@ private void testaExemplo(File exemplo) throws Exception } } } + + private void testaAjuda(File ajuda) throws Exception + { + if (ajuda.isDirectory()) { + File files[] = ajuda.listFiles(); + for (File file : files) { + testaAjuda(file); + } + } else { + if (ajuda.getName().endsWith(".por")) { + System.out.println("Testando "+ajuda.getParent()+" "+ ajuda.getName() + " ..."); + String codigoPortugol = new String(Files.readAllBytes(Paths.get(ajuda.toURI())), "ISO-8859-1"); + + String nomeCompleto = getClass().getCanonicalName(); + int indicePonto = nomeCompleto.lastIndexOf("."); + String localPath = nomeCompleto.substring(0, indicePonto).replace('.', '/'); + + String ajudaPath = ajuda.getPath().replace("\\", "/"); + int indicePasta = ajudaPath.lastIndexOf("/exemplos"); + ajudaPath = ajudaPath.substring(indicePasta, ajudaPath.length()); + + localPath = localPath+ajudaPath; + localPath = localPath.replace("\\", "/"); + String nomehtml = localPath.replace(".por", ".html"); + + String codigoHTML = PortugolHTMLHighlighter.getText(Utils.removerInformacoesPortugolStudio(codigoPortugol)); + String codigoHTMLCorreto = ResourceHandle.readInternalResourceFile(nomehtml); + codigoHTML = codigoHTML.replaceAll("\\s+", ""); + codigoHTMLCorreto = codigoHTMLCorreto.replaceAll("\\s+", ""); + //System.out.println(codigoHTML); + Assert.assertEquals("Os códigos HTML gerados não são iguais!", codigoHTMLCorreto, codigoHTML); + + System.out.println(ajuda.getName() + " testado com sucesso!"); + System.out.println(); + } + } + } } diff --git a/ide/src/test/java/br/univali/ps/ui/editor/formatador/ResourceHandle.java b/ide/src/test/java/br/univali/ps/ui/editor/formatador/ResourceHandle.java new file mode 100644 index 000000000..105bf4620 --- /dev/null +++ b/ide/src/test/java/br/univali/ps/ui/editor/formatador/ResourceHandle.java @@ -0,0 +1,60 @@ +package br.univali.ps.ui.editor.formatador; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.logging.Level; +import java.util.logging.Logger; + +public final class ResourceHandle +{ + private static final Logger LOGGER = Logger.getLogger(ResourceHandle.class.getName()); + private static final String CHARSET_PADRAO = "UTF-8"; + + public static String readInternalResourceFile(String path) throws IOException + { + return read(Thread.currentThread().getContextClassLoader().getResourceAsStream(path), CHARSET_PADRAO); + } + + public static String readInternalResourceFile(String path, String charset) throws IOException + { + return read(Thread.currentThread().getContextClassLoader().getResourceAsStream(path), charset); + } + + public static String readExternalResourceFile(File file) throws IOException + { + return read(new FileInputStream(file), CHARSET_PADRAO); + } + + public static String readExternalResourceFile(File file, String charset) throws IOException + { + return read(new FileInputStream(file), charset); + } + + private static String read(InputStream inputStream, String charset) throws IOException + { + StringBuilder reading = new StringBuilder(); + + try (InputStreamReader isr = new InputStreamReader(inputStream, charset); BufferedReader reader = new BufferedReader(isr)) + { + int read; + char[] buffer = new char[4096]; + + while ((read = reader.read(buffer, 0, buffer.length)) > 0) + { + reading.append(buffer, 0, read); + } + } + catch (Exception ex) + { + LOGGER.log(Level.SEVERE, null, ex); + + throw ex; + } + + return reading.toString().replaceAll(System.lineSeparator(), "\n"); + } +} diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo1.html new file mode 100644 index 000000000..fab11a4fb --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo1.html @@ -0,0 +1,4 @@ +inclua biblioteca Mouse +inclua biblioteca Graficos --> g +Mouse.ocultar_cursor() +g.iniciar_modo_grafico(verdadeiro) \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo2.html new file mode 100644 index 000000000..771831109 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/bibliotecas/exemplo2.html @@ -0,0 +1,12 @@ +programa +{ + inclua biblioteca Matematica + inclua biblioteca Texto --> t + funcao inicio() + { + real resultado + resultado = Matematica.arredondar(Matematica.PI,5) + escreva(resultado) + escreva(t.caixa_alta("texto")) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo1.html new file mode 100644 index 000000000..59918eaef --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo1.html @@ -0,0 +1,2 @@ +const inteiro NOME_DA_CONSTANTE = 3 +const real NOME_DA_CONSTANTE2 = 45 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo2.html new file mode 100644 index 000000000..95969d45a --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/constante/exemplo2.html @@ -0,0 +1,14 @@ +programa +{ + //Constante global do tipo de dado real + const real ACELERACAO_GRAVIDADE = 9.78 + + funcao inicio() + { + //Vetor constante local do tipo de dado caracter + const caracter VOGAIS[5] = {'a','e','i','o','u'} + + //Matriz constante local do tipo de dado inteiro + const inteiro TECLADO_NUMERICO[][] = {{1,2,3},{4,5,6},{7,8,9}} + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo1.html new file mode 100644 index 000000000..3fe4f59f0 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo1.html @@ -0,0 +1,12 @@ +funcao real nome_da_funcao (inteiro parametro1,real parametro2) +{ + retorne parametro1 * parametro2 +} +funcao inteiro nome_da_funcao2 () +{ + retorne 1 +} +funcao nome_da_funcao3 (cadeia &parametro) +{ + parametro = "Novo Valor" +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo2.html new file mode 100644 index 000000000..f0e190bba --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/funcao/exemplo2.html @@ -0,0 +1,54 @@ +programa +{ + //Função com retorno do tipo vazio sem parâmetro + funcao vazio imprime_linha() + { + escreva("\n-----------------------------\n") + } + + //Função com retorno do tipo vazio + funcao inicio() + { + //Imprime o retorno da função media + escreva(media(4,9,8)) + + imprime_linha() + + inteiro variavel = 123 + + zera_valor(variavel) + + //Imprime 0 + escreva(variavel) + + imprime_linha() + + inteiro num=3 + + //Verifica se o número 3 é par com uma resposta do tipo lógico + escreva (num, " é par? ", verifica_par(num)) + } + + //Função com retorno do tipo real e três parâmetros do tipo inteiro + funcao real media(inteiro m1, inteiro m2, inteiro m3) + { + retorne (m1 * 2 + m2 * 3 + m3 * 8) / 13.0 + } + + //Função com retorno vazio e parâmetro por referência + funcao zera_valor(inteiro &valor) + { + valor = 0 + } + + //Função com retorno do tipo lógico e parâmetro do tipo real + funcao logico verifica_par(inteiro num) + { + se (num % 2 != 0) + { + retorne falso + } + + retorne verdadeiro + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo1.html new file mode 100644 index 000000000..01d0954d7 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo1.html @@ -0,0 +1,4 @@ +//Declaração de uma matriz de numeros reais com 5 linhas e 3 colunas +real nome_da_variavel[5][3] +//Gravar um valor na matriz na posição 0 (primeira linha) e 1 (segunda coluna) +nome_da_variavel[0][1] = 2.5 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo2.html new file mode 100644 index 000000000..fdb7f4c9e --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/matriz/exemplo2.html @@ -0,0 +1,34 @@ +programa +{ + funcao inicio() + { + //Declaração de uma matriz de inteiros + // de duas linhas e duas colunas já inicializado. + inteiro matriz[2][2] = {{15,22},{10,11}} + + //Atribui -1 na primeira linha e segunda + // coluna da matriz. + matriz[0][1] = -1 + + //Imprime o valor 15 correspondente + // a primeira linha e primeira coluna da matriz. + inteiro i = 0 + escreva(matriz[i][0]) + escreva("\n") + + //Imprime o valor 11 correspondente + // a última linha e última coluna da matriz. + escreva(matriz[1][1]) + + //Declaração de uma matriz de reais de + // duas linhas e quatro colunas. + real outra_matriz[2][4] + + //Declaração de uma matriz de caracteres onde o tamanho + // de linhas e colunas são definidos pela inicialização + caracter jogo_velha[][] = {{'X','O','X'} + ,{'O','X','O'} + ,{' ',' ','X'}} + + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo1.html new file mode 100644 index 000000000..1c67ad336 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo1.html @@ -0,0 +1,7 @@ +caracter nome_variavel +inteiro variavel_inicializada = 42 +real nome_variavel2 +logico nome_variavel3 +// ou para declarar varias variáveis de um mesmo tipo: +cadeia var1,var2,var3,var4 +logico var4,var5,var6 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo2.html new file mode 100644 index 000000000..fbf7c52d1 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/variavel/exemplo2.html @@ -0,0 +1,23 @@ +programa +{ + //variável global do tipo inteiro + inteiro variavel + + funcao inicio() + { + //variável local do tipo inteiro + inteiro outra_variavel + + //variável local do tipo real já inicializada + real altura = 1.79 + + cadeia frase = "Isso é uma variável do tipo cadeia" + + caracter inicial = 'P' + + logico exemplo = verdadeiro + + //Imprime 1.79, valor obtido na variável altura + escreva(altura) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo1.html new file mode 100644 index 000000000..d9ca757f5 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo1.html @@ -0,0 +1,10 @@ +inteiro vetor[5] +caracter vetor2[200] + +//vetores inicializados +real vetor3[2] = {1.4,2.5} +logico vetor4[4] = {verdadeiro,falso,verdadeiro,verdadeiro} +cadeia vetor5[] = {"Questão","Fundamental"} + +//Mudando o valor do vetor5 na posição 0 de "Questão" para "Pergunta" +vetor5[0] = "Pergunta" \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo2.html new file mode 100644 index 000000000..36f4e8173 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/declaracoes/vetor/exemplo2.html @@ -0,0 +1,29 @@ +programa +{ + funcao inicio() + { + //Declaração de um vetor de inteiros + // de cinco posições já inicializado. + inteiro vetor[5] = {15,22,8,10,11} + + //Imprime o valor 15 correspondente + // ao primeiro elemento do vetor. + escreva(vetor[0]) + escreva("\n") + + //Imprime o segundo elemento do vetor + escreva(vetor[1]) + escreva("\n") + + //Imprime o valor 11 correspondente + // ao último elemento do vetor + escreva(vetor[4]) + + //Declaração de um vetor de reais de dez posições + real outro_vetor[10] + + //Declaração de um vetor de caracteres onde o tamanho + // é definido pela quantidade de elementos da inicialização + caracter nome[] = {'P','o','r','t','u','g','o','l'} + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo1.html new file mode 100644 index 000000000..456999841 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo1.html @@ -0,0 +1 @@ +escreva ("Escreva o texto a ser digitado aqui") \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo2.html new file mode 100644 index 000000000..e2645d613 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/escreva/exemplo2.html @@ -0,0 +1,25 @@ +programa +{ + funcao inicio() + { + inteiro variavel=5 + + //escreve no console um texto qualquer + escreva ("Escreva um texto aqui.\n") + + //escreve no console o valor da variável "variavel" + escreva (variavel, "\n") + + //escreve no console o resultado da operação + escreva (variavel+variavel, "\n") + + //escreve no console o texto digitado, e o valor contido na variável + escreva ("O valor da variável é: ", variavel) + + //escreve no console o texto com quebra de linha + escreva ("Texto com\n", "quebra-linha") + + //escreve no console o texto com espaço de tabulação + escreva ("Texto com\t tabulação") + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo1.html new file mode 100644 index 000000000..26c6d52fd --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo1.html @@ -0,0 +1,8 @@ +inteiro x +cadeia y +real z + +//chamando o comando leia +leia(x) +leia(y,z) +//No final as variáveis irão possuir o valor digitado pelo usuário. \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo2.html new file mode 100644 index 000000000..e24e15f15 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/leia/exemplo2.html @@ -0,0 +1,28 @@ +programa +{ + funcao inicio() + { + inteiro idade + real salario, nota1, nota2, nota3 + cadeia nome, sobrenome + + escreva("Informe a sua idade: ") + leia (idade) //lê o valor digitado para "idade" + + escreva("Informe seu salario: ") + leia (salario) //lê o valor digitado para "salario" + + escreva("Informe o seu nome e sobrenome: ") + leia (nome, sobrenome) //lê o valor digitado para "nome" e "sobrenome" + + escreva("Informe as suas três notas: ") + leia (nota1, nota2, nota3) //lê o valor digitado para "nota1", "nota2" e "nota3" + + escreva("Seu nome é:"+nome+" "+sobrenome+"\n") + escreva("Você tem "+idade+" anos e ganha de salario "+salario+"\n") + escreva("Suas três notas foram:\n") + escreva("Nota 1: "+nota1+"\n") + escreva("Nota 2: "+nota2+"\n") + escreva("Nota 3: "+nota3+"\n") + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo1.html new file mode 100644 index 000000000..a0da17a13 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo1.html @@ -0,0 +1 @@ +limpa() \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo2.html new file mode 100644 index 000000000..0e2508b74 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/entrada_saida/limpa/exemplo2.html @@ -0,0 +1,20 @@ +programa +{ + + funcao inicio() + { + cadeia nome + + //imprime a frase "Qual é o seu nome?" + escreva("Qual é o seu nome ?\n") + + //Detecta o que o usuario escreveu na tela + leia(nome) + + //Limpa tudo que estava escrito no console + limpa() + + //Escreve resposta + escreva("Olá "+nome) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo1.html new file mode 100644 index 000000000..ff8a56625 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo1.html @@ -0,0 +1,31 @@ +inteiro numero +leia(numero) +escolha(numero) +{ + caso 1: + //Instruções caso o numero for igual a 1 + pare + + caso 2: + //Instruções caso o numero for igual a 2 + pare + + caso 50: + //Instruções caso o numero for igual a 50 + pare + + caso contrario: + //Instruções caso nenhum dos casos anteriores não seja verdadeiro +} + +cadeia texto +leia(texto) +escolha(texto) +{ + caso "sim": + //Instruções caso o texto for igual a "sim" + pare + + caso "nao": + //Instruções caso o texto for igual a "nao" +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo2.html new file mode 100644 index 000000000..7262e63d9 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/escolha_caso/exemplo2.html @@ -0,0 +1,24 @@ +programa +{ + funcao inicio() + { + inteiro valor=1 + escolha (valor) + { + caso 0: //testa se o valor é igual a 0 + escreva ("o valor é igual a 0") + pare + + caso 1: //testa se o valor é igual a 1 + escreva ("o valor é igual a 1") + pare + + caso 2: //testa se o valor é igual a 2 + escreva ("o valor é igual a 2") + pare + + caso contrario: + escreva ("o valor não é igual a 0, 1 ou 2") + } + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo1.html new file mode 100644 index 000000000..332b65db9 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo1.html @@ -0,0 +1,11 @@ +logico condicao = verdadeiro +se (condicao) +{ + //Instruções a serem executadas se o desvio for verdadeiro +} + +inteiro x = 5 +se (x > 3) +{ + //Instruções a serem executadas se o desvio for verdadeiro +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo2.html new file mode 100644 index 000000000..06b22642a --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se/exemplo2.html @@ -0,0 +1,17 @@ +programa +{ + funcao inicio() + { + + inteiro num + + escreva ("Digite um número: ") + leia (num) + + se (num==0) + { + escreva ("O número digitado é 0") + } + + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo1.html new file mode 100644 index 000000000..13ff0e738 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo1.html @@ -0,0 +1,9 @@ +logico condicao = falso +se (condicao) +{ + //Instruções a serem executadas se o desvio for verdadeiro +} +senao +{ + //Instruções a serem executadas se o desvio for falso +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo2.html new file mode 100644 index 000000000..97c8bcd87 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao/exemplo2.html @@ -0,0 +1,21 @@ +programa +{ + funcao inicio() + { + + inteiro hora + + escreva ("Digite a hora: ") + leia (hora) + + se (hora >= 6 e hora <= 18) + { + escreva ("É dia") + } + senao + { + escreva ("É noite") + } + + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo1.html new file mode 100644 index 000000000..47d19f225 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo1.html @@ -0,0 +1,10 @@ +logico condicao = falso +logico condicao2 = verdadeiro +se (condicao) +{ + //Instruções a serem executadas se o desvio for verdadeiro +} +senao se (condicao2) +{ + //Instruções a serem executadas se o desvio anterior for falso e este desvio for verdadeiro +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo2.html new file mode 100644 index 000000000..c92a915bd --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo2.html @@ -0,0 +1,12 @@ +se (12 < 5) +{ + //Instruções a serem executadas se o desvio for verdadeiro +} +senao se ("palavra" == "texto") +{ + //Instruções a serem executadas se o desvio anterior for falso e este desvio for verdadeiro +} +senao +{ + //Instruções a serem executadas se o desvio anterior for falso +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo3.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo3.html new file mode 100644 index 000000000..de964b6de --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/desvio/se_senao_se/exemplo3.html @@ -0,0 +1,24 @@ +programa +{ + funcao inicio() + { + real nota + leia(nota) + se(nota >= 9) + { + escreva("O aluno foi um desempenho muito bom na prova") + } + senao se (nota >= 7) + { + escreva("O aluno teve um desempenho bom na prova") + } + senao se (nota >= 6) + { + escreva("O aluno teve um desempenho razoável na prova") + } + senao + { + escreva("O aluno teve um desempenho mau na prova") + } + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo1.html new file mode 100644 index 000000000..c84e64637 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo1.html @@ -0,0 +1,5 @@ +logico condicao = verdadeiro +enquanto (condicao) +{ + //Executa a as instruções dentro do laço enquanto a condicao for verdadeira +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo2.html new file mode 100644 index 000000000..be622aad2 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquanto/exemplo2.html @@ -0,0 +1,14 @@ +programa +{ + funcao inicio() + { + caracter parar + parar = 'N' + + enquanto (parar != 'S') + { + escreva ("deseja parar o laço? (S/N)") + leia (parar) + } + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo1.html new file mode 100644 index 000000000..63c1b1678 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo1.html @@ -0,0 +1,5 @@ +logico condicao = verdadeiro +faca +{ + //Executa os comandos pelo menos uma vez, e continua executando enquanto a condição for verdadeira +} enquanto (condicao) \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo2.html new file mode 100644 index 000000000..493997460 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/enquantofaca/exemplo2.html @@ -0,0 +1,16 @@ +programa +{ + funcao inicio() + { + real aresta, area + + faca + { + escreva ("Informe o valor da aresta: ") + leia (aresta) + } enquanto (aresta <= 0) + + area=aresta*aresta + escreva("A área é: ", area) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo1.html new file mode 100644 index 000000000..e3556be9d --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo1.html @@ -0,0 +1,4 @@ +para (inteiro i = 0; i < 8; i++) +{ + //Codigo a ser executado enquanto a condição for satisfeita. +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo2.html new file mode 100644 index 000000000..ca616747e --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/estruturas_controle/repeticao/para/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + inteiro tab + + para (inteiro c=1; c<=10; c++) + { + tab=c*3 + escreva ("3 x ", c, " = ", tab, "\n") + } + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo1.html new file mode 100644 index 000000000..67f71c23c --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo1.html @@ -0,0 +1,4 @@ +variavel = 6 +variavel = variavel2 +variavel = 6 + 4 / variavel2 +leia (variavel) \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo2.html new file mode 100644 index 000000000..a4e42e0b8 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo2.html @@ -0,0 +1,10 @@ +variavel1 += variavel2 // Equivalente a: variavel1 = variavel1 + variavel2; +variavel1 -= variavel2 // Equivalente a: variavel1 = variavel1 - variavel2; +variavel1 *= variavel2 // Equivalente a: variavel1 = variavel1 * variavel2; +variavel1 /= variavel2 // Equivalente a: variavel1 = variavel1 / variavel2; +variavel1 %= variavel2 // Equivalente a: variavel1 = variavel1 % variavel2; +variavel1 & variavel2 // Equivalente a: variavel1 = variavel1 & variavel2; +variavel1 ^= variavel2 // Equivalente a: variavel1 = variavel1 ^ variavel2; +variavel1 |= variavel2 // Equivalente a: variavel1 = variavel1 | variavel2; +variavel1++ // Equivalente a: variavel1 = variavel1 + 1; +variavel1-- // Equivalente a: variavel1 = variavel1 - 1; \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo3.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo3.html new file mode 100644 index 000000000..cdebffc5d --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/atribuicao/exemplo3.html @@ -0,0 +1,17 @@ +programa +{ + funcao inicio() + { + //Atribuição de valores constantes a uma variável + inteiro a + a = 2 + + //Atribuição através de entrada de dados, informado pelo usuário + inteiro b + leia(b) + + //Atribuição através de uma variável já informada pelo usuário + inteiro c + c = b + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo1.html new file mode 100644 index 000000000..1ef2c1165 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo1.html @@ -0,0 +1,8 @@ +escreva(1 + 5) //Operação Aritmética 1 + 5 sendo escrita na tela + +real numero = 50 + 30 //Operação Aritmética 50 + 30 sendo armazenada na variável numero + +se(20 + 40 < 70) //Operação Aritmética 20 + 40 dentro de uma estrutura de controle "se" em conjunto com uma operação relacional "<". +{ + //Comandos +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo2.html new file mode 100644 index 000000000..74a9c35e2 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_adicao/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + inteiro valor + + escreva (5+8, "\n") + + valor = 5+8 + + escreva (valor) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo1.html new file mode 100644 index 000000000..ed433e55c --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo1.html @@ -0,0 +1,4 @@ +escreva(15 / 5) //Operação Aritmética 1 * 5 sendo escrita na tela + +real numero = 50 / 25.6 //Operação Aritmética 50 * 30 sendo armazenada na variável numero + \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo2.html new file mode 100644 index 000000000..00e2e237f --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_divisao/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + inteiro valor + + escreva (20/10, "\n") + + valor = 20/10 + + escreva (valor) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo1.html new file mode 100644 index 000000000..8851977f5 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo1.html @@ -0,0 +1,4 @@ +escreva(13 % 5) //Operação Aritmética 13 % 5 sendo escrita na tela + +real numero = 50 % 4 //Operação Aritmética 50 % 4 sendo armazenada na variável numero + \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo2.html new file mode 100644 index 000000000..e9d0b1b11 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_modulo/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + inteiro valor + + escreva (7%3, "\n") + + valor = 7%3 + + escreva (valor) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo1.html new file mode 100644 index 000000000..8f0b05689 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo1.html @@ -0,0 +1,4 @@ +escreva(1 * 5) //Operação Aritmética 1 * 5 sendo escrita na tela + +real numero = 50 * 30 //Operação Aritmética 50 * 30 sendo armazenada na variável numero + \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo2.html new file mode 100644 index 000000000..089ed2db7 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_multiplicacao/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + inteiro valor + + escreva (3*4, "\n") + + valor = 3*4 + + escreva (valor) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo1.html new file mode 100644 index 000000000..b4888073a --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo1.html @@ -0,0 +1,4 @@ +escreva(1 - 5) //Operação Aritmética 1 - 5 sendo escrita na tela + +real numero = 50 - 30 //Operação Aritmética 50 - 30 sendo armazenada na variável numero + \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo2.html new file mode 100644 index 000000000..957ecd7ca --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_aritimeticas/operacao_subtracao/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + inteiro valor + + escreva (10-3, "\n") + + valor = 10-3 + + escreva (valor) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo1.html new file mode 100644 index 000000000..4424f667f --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo1.html @@ -0,0 +1,9 @@ +/* +Para se fazer a operação Bitwise 5 AND 3 +0101 (decimal 5) +AND +0011 (decimal 3) +---- +0001 (decimal 1) +*/ +inteiro resultado = 5 & 3 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo2.html new file mode 100644 index 000000000..0260cc660 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_and/exemplo2.html @@ -0,0 +1,7 @@ +programa +{ + funcao inicio() + { + escreva (5 & 3) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo1.html new file mode 100644 index 000000000..7e7460199 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo1.html @@ -0,0 +1,8 @@ +/* +Para se fazer a operação Bitwise NOT 7 +0111 (decimal 7) +NOT +---- +1000 (decimal 8) +*/ +inteiro resultado = ~7 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo2.html new file mode 100644 index 000000000..d97bce15b --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_not/exemplo2.html @@ -0,0 +1,7 @@ +programa +{ + funcao inicio() + { + escreva (~7) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo1.html new file mode 100644 index 000000000..886638a98 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo1.html @@ -0,0 +1,9 @@ +/* +Para se fazer a operação Bitwise 5 OR 3 +0101 (decimal 5) +OR +0011 (decimal 3) +---- +0111 (decimal 7) +*/ +inteiro resultado = 5 | 3 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo2.html new file mode 100644 index 000000000..09351c333 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_or/exemplo2.html @@ -0,0 +1,7 @@ +programa +{ + funcao inicio() + { + escreva (5 | 3) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo1.html new file mode 100644 index 000000000..bdcbdbb0a --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo1.html @@ -0,0 +1,8 @@ +/* +Para se fazer a operação Bitwise 23 >> 1 +00010111 (decimal +23) +LEFT-SHIFT uma vez +-------- +00101110 (decimal +46) +*/ +inteiro resultado = 23 << 1 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo2.html new file mode 100644 index 000000000..545180204 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo2.html @@ -0,0 +1,8 @@ +/* +Para se fazer a operação Bitwise -105 >> 1 +10010111 (decimal -105) +RIGHT-SHIFT uma vez +-------- +11001011 (decimal -53) +*/ +inteiro resultado = -105 >> 1 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo3.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo3.html new file mode 100644 index 000000000..0b96ba641 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_shift/exemplo3.html @@ -0,0 +1,7 @@ +programa +{ + funcao inicio() + { + escreva (23 << 1, "\n", -105 >> 1) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo1.html new file mode 100644 index 000000000..faf013787 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo1.html @@ -0,0 +1,9 @@ +/* +Para se fazer a operação Bitwise 5 XOR 3 +0101 (decimal 5) +XOR +0011 (decimal 3) +---- +0110 (decimal 6) +*/ +inteiro resultado = 5 ^ 3 \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo2.html new file mode 100644 index 000000000..fae28a4db --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_bitwise/bitwise_xor/exemplo2.html @@ -0,0 +1,7 @@ +programa +{ + funcao inicio() + { + escreva (5 ^ 3) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo1.html new file mode 100644 index 000000000..9b6ebba72 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo1.html @@ -0,0 +1,11 @@ +se (5 > 4 e 6 == 6) //Operação logica 'e' junto com operações relacionais. +{ + //comandos +} + +enquanto(verdadeiro e 5 < 4) //Operação logica 'e' junto com operações relacionais e tipo logico. +{ + //comandos +} + +logico saida = 5 > 3 e 4 < 5 e 6 < 7 //Operação lógica 'e' junto com operações relacionais. \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo2.html new file mode 100644 index 000000000..ed78d6b2e --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/e/exemplo2.html @@ -0,0 +1,26 @@ +programa +{ + funcao inicio() + { + //Teste utilizando o operador lógico "e" onde a deve ser igual a 2 e b deve ser igual a 2 também + inteiro a = 2, b = 2 + se(a == 2 e b == 2) + { + escreva("Teste positivo") + } + + //Neste caso c é igual a 2, entretanto d não é igual a 2, logo este teste não terá como resposta verdadeiro + inteiro c = 2, d = 3 + se(c == 2 e d == 2) + { + escreva("Teste positivo") + } + + //Neste caso de teste g é igual a 2 e f é diferente de 3, logo este teste terá como resposta verdadeiro + inteiro g = 2, f = 2 + se(g == 2 e f != 3) + { + escreva("Teste positivo") + } + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo1.html new file mode 100644 index 000000000..610d5f1cc --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo1.html @@ -0,0 +1,11 @@ +se (nao falso) //Operação logica 'nao' junto com operações relacionais. +{ + //comandos +} + +enquanto(nao 5 < 4) //Operação logica 'nao' junto com operações relacionais e tipo logico. +{ + //comandos +} + +logico saida = nao (5 > 3 e 4 < 5) e 6 < 7 //Operação lógica 'nao' junto com operações relacionais e duas operações logicas 'e'. \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo2.html new file mode 100644 index 000000000..593ce5e5d --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/nao/exemplo2.html @@ -0,0 +1,19 @@ +programa +{ + funcao inicio() + { + //Neste caso de teste a variável teste foi inicializada como falso, e foi verificado se teste não é verdadeiro + logico teste = falso + se(nao(teste)) + { + escreva("Teste positivo") + } + + //Neste caso teste a soma das variáveis a e b resulta em 5, e comparado se a mesma é maior que 7, entretanto o operador nao, verifica se a+b não são maiores que 7 + inteiro a = 2, b = 3 + se(nao(a+b > 7)) + { + escreva("Teste positivo") + } + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo1.html new file mode 100644 index 000000000..f77f43358 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo1.html @@ -0,0 +1,11 @@ +se (5 > 4 ou 7 == 6) //Operação logica 'ou' junto com operações relacionais. +{ + //comandos +} + +enquanto(falso ou 5 > 4) //Operação logica 'ou' junto com operações relacionais e tipo logico. +{ + //comandos +} + +logico saida = 5 > 8 ou 4 < 12 ou 34 < 7 //Operação lógica 'ou' junto com operações relacionais. \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo2.html new file mode 100644 index 000000000..adb451ddf --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/operacoes_logicas/ou/exemplo2.html @@ -0,0 +1,20 @@ +programa +{ + funcao inicio() + { + //Teste utilizando o operador lógico "ou" onde a deve ser igual a 2 ou pelo menos b deve ser igual a 2, qualquer um destes satisfaz o teste oferecendo-lhe verdadeiro como resposta + inteiro a = 2, b = 2 + se(a == 2 ou b == 2) + { + escreva("Teste positivo") + } + + //Neste caso c é igual a 2, entretanto d não é igual a 2, mas qualquer uma das condições oferece ao teste como resposta: verdadeiro + inteiro c = 2, d = 3 + se(c == 2 ou d == 2) + { + escreva("Teste positivo") + } + + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo1.html new file mode 100644 index 000000000..eef89495b --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo1.html @@ -0,0 +1,14 @@ +se (5 > 3) // Estrutura de controle: "se (...)", Operação relacional: "5 > 3" +{ + //conjunto de comandos se for verdadeiro +} + +para (i = 0; i < 5; i++) // Estrutura de controle: "para(...)", Operação relacional: "i < 5" +{ + //conjunto de comandos a serem repetidos até a Expressão se tornar falsa +} + +faca // Estrutura de controle "faca{}enquanto(...)", Operação relacional: "6 < 2" +{ + //conjunto de comandos a serem repetidos enquanto a condicao for verdadeira após a primeira execução. +} enquanto ( 6 < 2 ); \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo2.html new file mode 100644 index 000000000..1c447774e --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/expressao/relacional/exemplo2.html @@ -0,0 +1,23 @@ +programa +{ + funcao inicio() + { + //Comparação entre valor A e B utilizando o operador maior que + inteiro a = 5, b = 3 + se(a > b){ + escreva("A é maior que B") + } + + //Comparação entre A e B utilizando o operador igual a + se(a == b){ + escreva("A é igual a B") + } + + //Comparação entre A e B utilizando o operador maior ou igual a + se(a >= b){ + escreva("A é maior ou igual a B") + } + + //Nos testes acima somente o primeiro teste A > B é verdadeiro, deste modo somente esta mensagem será exibida + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/index.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/index.html new file mode 100644 index 000000000..235578024 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/index.html @@ -0,0 +1,25 @@ +//O comando programa é obrigatório +programa +{ + //Inclusões de bibliotecas + // - Quando houver a necessidade de utilizar + // uma ou mais bibliotecas, as inclusões + // devem aparecer antes de qualquer declaração + + /* + * Dentro do programa é permitido declarar + * variáveis globais, constantes globais e + * funções em qualquer ordem. + */ + + //Declarações de funções somente + //são permitidas dentro do programa. + funcao inicio() + { + /* + * Declarações de variáveis locais, + * constantes locais, estruturas de + * controle e expressões. + */ + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo1.html new file mode 100644 index 000000000..cd0ed76ea --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo1.html @@ -0,0 +1 @@ +cadeia nome_da_variavel \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo2.html new file mode 100644 index 000000000..a4c7cd3be --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/cadeia/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + cadeia nome1, nome2 + + nome1 = "Variável declarada através de atribuição" //variável declarada através de atribuição do programador + + escreva ("Digite seu nome: ") + leia (nome2) //variável declarada através de entrada do usuário + escreva ("\nOlá ", nome2) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo1.html new file mode 100644 index 000000000..95f78bd22 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo1.html @@ -0,0 +1 @@ +caracter nome_da_variavel \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo2.html new file mode 100644 index 000000000..99da160ef --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/caracter/exemplo2.html @@ -0,0 +1,13 @@ +programa +{ + funcao inicio() + { + caracter vogal, consoante + vogal = 'a' //variável declarada através de atribuição do programador + + escreva ("Digite uma consoante: ") + leia (consoante) //variável declarada através de entrada do usuário + + escreva ("Vogal: ", vogal, "\n", "Consoante: ", consoante) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo1.html new file mode 100644 index 000000000..6291e1f64 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo1.html @@ -0,0 +1 @@ +inteiro nome_da_variavel \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo2.html new file mode 100644 index 000000000..105e9464d --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/inteiro/exemplo2.html @@ -0,0 +1,10 @@ +programa +{ + funcao inicio() + { + inteiro num1, num2 + num1 = 5 + num2 = 3 + escreva (num1 + num2) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo1.html new file mode 100644 index 000000000..5b557f3c3 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo1.html @@ -0,0 +1 @@ +logico nome_da_variavel \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo2.html new file mode 100644 index 000000000..844eba82c --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/logico/exemplo2.html @@ -0,0 +1,15 @@ +programa +{ + funcao inicio() + { + logico teste + inteiro num + + escreva ("Digite um valor para ser comparado :") + leia (num) + + teste = (num>0) + + escreva ("O número digitado é maior que zero? ", teste) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo1.html new file mode 100644 index 000000000..6a3d3c420 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo1.html @@ -0,0 +1 @@ +real nome_da_variavel \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo2.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo2.html new file mode 100644 index 000000000..d038fb3d8 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/real/exemplo2.html @@ -0,0 +1,11 @@ +programa +{ + funcao inicio() + { + real div + + div = 8.0/3.0 + + escreva (div) + } +} \ No newline at end of file diff --git a/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/vazio/exemplo1.html b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/vazio/exemplo1.html new file mode 100644 index 000000000..469972701 --- /dev/null +++ b/ide/src/test/resources/br/univali/ps/ui/editor/formatador/exemplos/tipos/vazio/exemplo1.html @@ -0,0 +1,38 @@ +programa +{ + funcao inicio() + { + imprime_linha() + informacoes("Portugol",2.0,"UNIVALI") + imprime_linha() + informacoes("Java",1.7,"Oracle") + imprime_linha() + informacoes("Ruby",2.0,"ruby-lang.org") + imprime_linha() + informacoes("Visual Basic",6.0,"Microsoft") + imprime_linha() + + } + + //Função de retorno vazio que dezenha uma linha no console + funcao vazio imprime_linha() + { + escreva("\n---------------------------------------------------------------------------------------------") + } + + //Função de retorno vazio que formata uma saida com base em seus parâmetros + funcao vazio informacoes(cadeia nome, real versao, cadeia fornecedor) + { + se (nome == "Visual Basic") + { + retorne + } + escreva("\n") + escreva("A linguagem ") + escreva(nome) + escreva(" encontra-se em sua versão ") + escreva(versao) + escreva(" e é fornecida pelo(a) ") + escreva(fornecedor) + } +} \ No newline at end of file