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); }
public static void PrintStatementExpression(ADStatementExpression expr, string tab) { Console.WriteLine($"{tab}|- Expression"); PrintExpression(expr.Expression, tab + '\t'); }