public static void ParseParametersList(Parser.State state, FunctionNode function) { if (state.GetToken().Is(TokenType.EOF)) { state.ErrorCode = (uint)ErrorCodes.T_UnexpectedEndOfFile; state.ErrorMessage = "Required <Identifier> as a function parameter"; return; } state.Save(); var token = state.GetTokenAndMoveNe(); if (!token.Is(TokenType.Identifier)) { state.Restore(); state.ErrorCode = (uint)ErrorCodes.P_IdentifierExpected; state.ErrorMessage = "Required <Identifier> as a function parameter"; return; } state.Drop(); function.Parameter = new VariableNode(token.Value); if (!state.GetToken().Is(TokenSubType.BraceSquareRight)) { state.ErrorCode = (uint)ErrorCodes.P_ClosingBraceRequired; state.ErrorMessage = "Required <BraceSquareRight> at the end of the function parameters list"; return; } state.GetNextNeToken(); }
private static ExpressionNode ParseValue(Parser.State state) { state.Save(); var token = state.GetTokenAndMoveNe(); if (token.Is(TokenType.Number)) { state.Drop(); return(new NumberNode( value: token.Value, isDecimal: token.Is(TokenSubType.Decimal) )); } else if (token.Is(TokenType.Identifier)) { state.Drop(); return(new VariableNode(token.Value)); } else if (token.Is(TokenType.String)) { state.Drop(); return(new StringNode(token.Value)); } else if (token.Is(TokenSubType.BraceRoundLeft)) { state.Drop(); var node = Parse(state); if (state.IsErrorOccured()) { return(node); } if (!state.GetToken().Is(TokenSubType.BraceRoundRight)) { state.ErrorCode = (uint)ErrorCodes.P_ClosingBraceRequired; state.ErrorMessage = "Expected <BraceRoundRight>, " + $"but <{state.GetToken().SubType}> was given"; return(node); } state.GetNextNeToken(); return(node); } state.Restore(); return(null); }