private INoArvore Expressao() { INoArvore no = null; no = Termo(); while (token.TipoToken == Tokens.OP_SOMA || token.TipoToken == Tokens.OP_SUB) { NoArvoreComposite noPai = new NoArvoreComposite(Soma()); if (no != null) { noPai.Add(no); // filho1 } else { EmiteErroSintaxe("left operand not defined"); } no = Termo(); if (no != null) { noPai.Add(no); // filho2 } else { EmiteErroSintaxe("right operand not defined"); } no = noPai; } return(no); }
private INoArvore ExpressaoLogicaE() { INoArvore no = null; NoArvoreComposite noPai = null; no = ExpressaoLogica(); while (token.TipoToken == Tokens.OP_LOGIC_E) { Casamento(Tokens.OP_LOGIC_E); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.ExpressaoLogica, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); // expressao lado esquerda do operador } else { EmiteErroSintaxe("left expression not defined"); } no = ExpressaoLogica(); if (no != null) { noPai.Add(no); } else { EmiteErroSintaxe("right expression not defined"); } no = noPai; } return(no); }
private INoArvore Fator() { NoArvoreComposite noPai; INoArvore no = null; switch (token.TipoToken) { case Tokens.ID: Casamento(Tokens.ID); no = new NoArvore(tokenAnterior, TipoExpressao.Identificador, TipoOperador.Nenhum); break; case Tokens.NUMERO: Casamento(Tokens.NUMERO); no = new NoArvore(tokenAnterior, TipoExpressao.Numero, TipoOperador.Nenhum); break; case Tokens.PARENTESE_ESQUERDO: Casamento(Tokens.PARENTESE_ESQUERDO); no = Expressao(); Casamento(Tokens.PARENTESE_DIREITO); break; case Tokens.COS: case Tokens.SEN: case Tokens.TANG: case Tokens.ACOS: case Tokens.ASEN: case Tokens.ATANG: case Tokens.LOG: case Tokens.LOG2: case Tokens.LOG10: case Tokens.RQD: no = OpCientifico(); noPai = new NoArvoreComposite(no); Casamento(Tokens.PARENTESE_ESQUERDO); no = Expressao(); noPai.Add(no); no = noPai; Casamento(Tokens.PARENTESE_DIREITO); break; case Tokens.PI: Casamento(Tokens.PI); no = new NoArvore(tokenAnterior, TipoExpressao.Constante, TipoOperador.Nenhum); break; case Tokens.NEP: Casamento(Tokens.NEP); no = new NoArvore(tokenAnterior, TipoExpressao.Constante, TipoOperador.Nenhum); break; default: EmiteErroSintaxe("Error of sintaxe on the line:" + token.Linha + " next to line: " + token.Coluna + " invalid token" + token.Lexema + "'"); break; } return(no); }
private INoArvore ListaExpresao() { INoArvore no = null; NoArvoreComposite noPai; no = ExpressaoLogicaE(); while (token.TipoToken == Tokens.OP_LOGIC_OU) { Casamento(Tokens.OP_LOGIC_OU); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.ExpressaoLogica, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); } else { EmiteErroSintaxe("error expression"); } no = ExpressaoLogicaE(); if (no != null) { noPai.Add(no); } else { EmiteErroSintaxe("error expression"); } no = noPai; } return(no); }
private INoArvore Termo() { INoArvore no = null; NoArvoreComposite noPai; switch (token.TipoToken) { case Tokens.NUMERO: case Tokens.ID: case Tokens.PARENTESE_ESQUERDO: case Tokens.COS: case Tokens.SEN: case Tokens.TANG: case Tokens.ACOS: case Tokens.ASEN: case Tokens.ATANG: case Tokens.LOG: case Tokens.LOG2: case Tokens.LOG10: case Tokens.PI: case Tokens.NEP: case Tokens.RQD: no = Fator(); if (token.TipoToken == Tokens.OP_FATORIAL) { Casamento(Tokens.OP_FATORIAL); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.Expressao, TipoOperador.Cientifico)); noPai.Add(no); no = noPai; } while (token.TipoToken == Tokens.OP_MULT || token.TipoToken == Tokens.OP_DIV || token.TipoToken == Tokens.OP_MOD || token.TipoToken == Tokens.OP_EXPOENTE) { noPai = new NoArvoreComposite(Mult()); if (no != null) { noPai.Add(no); // filho1 } else { EmiteErroSintaxe("Erro expect na expression"); } no = Fator(); if (no != null) { noPai.Add(no); // filho2 } else { EmiteErroSintaxe("Error expect an expression"); } no = noPai; } break; //case Tokens.NENHUM: // break; default: EmiteErroSintaxe("Error sintaxe"); break; } return(no); }
private INoArvore ExpressaoLogica() { INoArvore no = null; NoArvoreComposite noPai; no = Expressao(); switch (token.TipoToken) { case Tokens.OP_REL_MAIOR: Casamento(Tokens.OP_REL_MAIOR); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.Expressao, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); // expressao a esquerda do operador logico relacional } else { EmiteErroSintaxe("left expression not defined"); } no = Expressao(); if (no != null) { noPai.Add(no); // expressa a direita do operador logico relaciona } else { EmiteErroSintaxe("right expression not defined"); } no = noPai; break; case Tokens.OP_REL_MENOR: Casamento(Tokens.OP_REL_MENOR); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.Expressao, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); // expressao a esquerda do operador logico relacional } else { EmiteErroSintaxe("left expression not defined"); } no = Expressao(); if (no != null) { noPai.Add(no); // expressao a direita do operador logico relaciona } else { EmiteErroSintaxe("right expression not defined"); } no = noPai; break; case Tokens.OP_REL_MAIOR_QUE: Casamento(Tokens.OP_REL_MAIOR_QUE); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.Expressao, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); // expressao a esquerda do operador logico relacional } else { EmiteErroSintaxe("left expression not defined"); } no = Expressao(); if (no != null) { noPai.Add(no); // expressa a direita do operador logico relaciona } else { EmiteErroSintaxe("right expression not defined"); } no = noPai; break; case Tokens.OP_REL_MENOR_QUE: Casamento(Tokens.OP_REL_MENOR_QUE); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.Expressao, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); // expressao a esquerda do operador logico relacional } else { EmiteErroSintaxe("left expression not defined"); } no = Expressao(); if (no != null) { noPai.Add(no); // expressa a direita do operador logico relaciona } else { EmiteErroSintaxe("right expression not defined"); } no = noPai; break; case Tokens.OP_REL_IGUAL: Casamento(Tokens.OP_REL_IGUAL); noPai = new NoArvoreComposite(new NoArvore(tokenAnterior, TipoExpressao.Expressao, TipoOperador.OperadorLogico)); if (no != null) { noPai.Add(no); // expressao a esquerda do operador logico relacional } else { EmiteErroSintaxe("left operando not defined"); } no = Expressao(); if (no != null) { noPai.Add(no); // expressa a direita do operador logico relaciona } else { EmiteErroSintaxe("right operand not defined"); } no = noPai; break; } return(no); }