コード例 #1
0
ファイル: Program.cs プロジェクト: zeul72/YAMEP
        static void Main(string[] args)
        {
            var expression = "1 + 2 - 3 * 4 / 5";


            var lexer = new Lexer(new SourceScanner(expression));

            Console.WriteLine($"Lexing expression: {expression}");

            Token token = null;

            do
            {
                token = lexer.ReadNext( );
                Console.WriteLine($"Found Token Type {token.Type} at Position {token.Position} with a value of {token.Value}");
            } while(token.Type != Token.TokenType.EOE);


            var expressions = new string[] {
                "1 + 2",        //3
                "2 * 3",        //5
                "1 + 2 * 3",    //7
                "1",
                "1 / 2"
            };

            var expressionEngine = new ExpressionEngine();

            foreach (var e in expressions)
            {
                Console.WriteLine($"{e} = {expressionEngine.Evaluate( e )}");
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: zeul72/YAMEP
        static void Main(string[] args)
        {
            var expression = "1 + 2 - 3 * 4 / 5";

            var lexer = new Lexer(new SourceScanner(expression));

            Console.WriteLine($"Lexing expression: {expression}");

            Token token = null;

            do
            {
                token = lexer.ReadNext( );
                Console.WriteLine($"Found Token Type {token.Type} at Position {token.Position} with a value of {token.Value}");
            } while(token.Type != Token.TokenType.EOE);
        }
コード例 #3
0
ファイル: Parser.cs プロジェクト: zeul72/YAMEP
        /// <summary>
        /// Parses the TERM Production Rule
        /// TERM: FACTOR [('*'|'/') FACTOR]*
        /// </summary>
        private static ASTNode ParseTerm(Lexer lexer)
        {
            var left = ParseFactor(lexer);

            var peekToken = lexer.Peek();   //look ahead 1 token

            while (peekToken.Type == Token.TokenType.Multiplication || peekToken.Type == Token.TokenType.Division)
            {
                var op = lexer.ReadNext( );   //read the operator

                var right = ParseFactor(lexer);

                if (right == null)
                {
                    throw new Exception($"Invalid Expression. FACTOR Expected at position {lexer.Position}");
                }

                left = CreateBinaryOperator(op, left, right);

                peekToken = lexer.Peek( );  //lookahead of 1 token LL(k) where K = 1
            }

            return(left);
        }
コード例 #4
0
 private Token Accept( ) => _lexer.ReadNext( );