Ejemplo n.º 1
0
        public int Factor(LexemeAnalyzer lexemeAnalyzer)
        {
            Lexeme lexeme = lexemeAnalyzer.Next();
            int    result;

            switch (lexeme.GetLexemeType())
            {
            case LexemeType.Minus:
                result = Factor(lexemeAnalyzer);
                return(-result);

            case LexemeType.Number:
                return(Convert.ToInt32(lexeme.GetValue()));

            case LexemeType.LeftBracket:
                result = PlusMinus(lexemeAnalyzer);
                lexeme = lexemeAnalyzer.Next();

                if (lexeme.GetLexemeType() != LexemeType.RightBracket)
                {
                    throw new PositionLexemeException(lexeme.GetValue().ToString());
                }
                return(result);

            default:
                throw new PositionLexemeException(lexeme.GetValue().ToString());
            }
        }
Ejemplo n.º 2
0
        public int MultDiv(LexemeAnalyzer lexemeAnalyzer)
        {
            int result = Factor(lexemeAnalyzer);

            while (true)
            {
                Lexeme lexeme = lexemeAnalyzer.Next();
                switch (lexeme.GetLexemeType())
                {
                case LexemeType.Mul:
                    result *= Factor(lexemeAnalyzer);
                    break;

                case LexemeType.Div:
                    result /= Factor(lexemeAnalyzer);
                    break;

                case LexemeType.End:
                case LexemeType.RightBracket:
                case LexemeType.Plus:
                case LexemeType.Minus:
                    lexemeAnalyzer.Back();
                    return(result);

                default:
                    throw new PositionLexemeException(lexeme.GetValue().ToString());
                }
            }
        }