public static bool TryParseNode(IParser parser, out PrintxStatement node) { node = null; bool result = false; if (parser.PeekToken(TokenKind.PrintxKeyword)) { result = true; node = new PrintxStatement(); parser.NextToken(); node.StartIndex = parser.Token.Span.Start; node.Expressions = new List <ExpressionNode>(); if (parser.PeekToken(TokenKind.NameKeyword)) { parser.NextToken(); if (parser.PeekToken(TokenKind.Equals)) { parser.NextToken(); FglNameExpression name; if (FglNameExpression.TryParseNode(parser, out name)) { node.Name = name; } else { parser.ReportSyntaxError("Invalid name expression found in printx statement."); } } else { parser.ReportSyntaxError("Expected '=' in printx statement."); } } ExpressionNode expr; while (FglExpressionNode.TryGetExpressionNode(parser, out expr)) { node.Expressions.Add(expr); if (parser.PeekToken(TokenKind.Comma)) { parser.NextToken(); } else { break; } } node.EndIndex = parser.Token.Span.End; } return(result); }
private static bool TryGetReportStatement(IParser parser, out FglStatement node, ReportBlockNode reportNode, bool returnFalseInsteadOfErrors = false) { bool result = false; node = null; switch (parser.PeekToken().Kind) { case TokenKind.PrintKeyword: { PrintStatement prtStmt; if ((result = PrintStatement.TryParseNode(parser, out prtStmt, reportNode))) { node = prtStmt; } break; } case TokenKind.PrintxKeyword: { PrintxStatement prtxStmt; if ((result = PrintxStatement.TryParseNode(parser, out prtxStmt))) { node = prtxStmt; } break; } case TokenKind.NeedKeyword: { NeedStatement needStmt; if ((result = NeedStatement.TryParseNode(parser, out needStmt))) { node = needStmt; } break; } case TokenKind.PauseKeyword: { PauseStatement pauseStmt; if ((result = PauseStatement.TryParseNode(parser, out pauseStmt))) { node = pauseStmt; } break; } case TokenKind.SkipKeyword: { SkipStatement skipStmt; if ((result = SkipStatement.TryParseNode(parser, out skipStmt))) { node = skipStmt; } break; } default: result = false; break; } return(result); }