コード例 #1
0
        public static IADNode statement()
        {
            var     nextToken = MainFSM.PeekNextToken();
            IADNode result    = null;

            switch (nextToken.Type)
            {
            case TokenType.longType:
                var list = new ADVariableDeclarations();
                StatementHelpers.VariableDeclaration(ref list);

                list.Variables.Reverse();
                result = list;
                break;

            case TokenType.starType:
                result = new ADStatementExpression {
                    Expression = PrecedenceSyntaxAnalysis.Precedence(TokenType.semiType)
                };

                if (MainFSM.GetNextToken().Type != TokenType.semiType)
                {
                    SyntaxError("Byl ocekavan znak \';\'");
                }

                break;

            case TokenType.idType:
            case TokenType.incrType:
            case TokenType.decrType:
                if (MainFSM.PeekNextToken(2).Type == TokenType.leftRBType)
                {
                    var fceToken = MainFSM.GetNextToken();

                    result = fce_call(fceToken.Attribute);

                    if (MainFSM.GetNextToken().Type != TokenType.semiType)
                    {
                        SyntaxError("Byl ocekavan znak \';\'");
                    }
                }
                else
                {
                    result = new ADStatementExpression {
                        Expression = PrecedenceSyntaxAnalysis.Precedence(TokenType.semiType)
                    };

                    if (MainFSM.GetNextToken().Type != TokenType.semiType)
                    {
                        SyntaxError("Byl ocekavan znak \';\'");
                    }
                }
                break;

            case TokenType.ifType:
                result = StatementHelpers.Condition();
                break;

            case TokenType.forType:
                result = StatementHelpers.ForLoop();
                break;

            case TokenType.whileType:
                result = StatementHelpers.WhileLoop();
                break;

            case TokenType.doType:
                result = StatementHelpers.DoWhileLoop();
                break;

            case TokenType.returnType:
                result = StatementHelpers.Return();
                break;

            case TokenType.breakType:
                result = StatementHelpers.Break();
                break;

            case TokenType.continueType:
                result = StatementHelpers.Continue();
                break;

            case TokenType.leftCBType:
                result = StatementHelpers.InnerStatements();
                break;

            default:
                SyntaxError("Byl ocekavan jeden z nasledujici klicovych slov nebo znaku: long, *, identifikator, if, for, while, do, return, break, continue");
                break;
            }
            return(result);
        }
コード例 #2
0
 public static void PrintStatementExpression(ADStatementExpression expr, string tab)
 {
     Console.WriteLine($"{tab}|- Expression");
     PrintExpression(expr.Expression, tab + '\t');
 }