protected override bool EndLeaf() { if (mIsSuccessfulFinished == false) { var tmpSb = new StringBuilder(); tmpSb.Append("Abnormal termination instruction"); var tmpExcept = new SyntaxerException(tmpSb.ToString()); if(mLastToken != null) { tmpExcept.Line = mLastToken.Line; tmpExcept.Pos = mLastToken.Pos; } throw tmpExcept; } return true; }
public Parser.ScriptCodeDom.Operators.Operator CreateScriptCodeDomNode() { Parser.ScriptCodeDom.Operators.Operator tmpObj = null; switch (TokenType) { case Lexer.TokenKind.String: tmpObj = new ScriptCodeDom.Operators.StringLiteralReference(Value); break; case Lexer.TokenKind.METHOD: var tmpCallMethodOperator = new ScriptCodeDom.Operators.CallMethodOperator(Value); tmpObj = tmpCallMethodOperator; if (!StillOneScriptCore.Common.TypeHelpers.ListHelper.IsEmpty(Right.AdditionalItems)) { foreach (var param in Right.AdditionalItems) { var tmpParam = new ScriptCodeDom.Operators.FunctionParameter(); tmpParam.Operator = param.CreateScriptCodeDomNode(); tmpCallMethodOperator.AddParameter(tmpParam); } } break; case Lexer.TokenKind.VARIABLE: tmpObj = new ScriptCodeDom.Operators.VariableReference(Value); break; default: var tmpSb = new StringBuilder(); tmpSb.Append("Unexpected construction"); var tmpExcept = new SyntaxerException(tmpSb.ToString()); tmpExcept.Line = this.Line; tmpExcept.Pos = this.Pos; tmpExcept.TokenText = Value; throw tmpExcept; } var tmpUnaryOperator = tmpObj as ScriptCodeDom.Operators.UnaryOperator; if (tmpUnaryOperator != null) { tmpUnaryOperator.Left = this.Left.CreateScriptCodeDomNode(); } return tmpObj; }
protected override ResultOfProcess ProcessToken(Lexer.Token token) { if (mParent.IsTerminateCondition(token)) { this.Context.Recovery(token); return ResultOfProcess.Stop; } if(token.TokenType == Lexer.TokenKind.Name) { if (mCurrNode == null || mCurrNode.TokenType != Lexer.TokenKind.OPERATOR_GET_MEMBER) { token.TokenType = Lexer.TokenKind.VARIABLE; } else { token.TokenType = Lexer.TokenKind.MEMBER; } } if (token.TokenType == Lexer.TokenKind.Point) { token.TokenType = Lexer.TokenKind.OPERATOR_GET_MEMBER; } if (token.TokenType == Lexer.TokenKind.OPEN_ROUND_BRACKET) { if (mCurrNode.TokenType == Lexer.TokenKind.MEMBER) { var tmpParentNode = mCurrNode.Parent; tmpParentNode.TokenType = Lexer.TokenKind.METHOD; tmpParentNode.Value = mCurrNode.Value; tmpParentNode.Line = mCurrNode.Line; tmpParentNode.Pos = mCurrNode.Pos; mCurrNode.Value = "(...)"; mCurrNode.TokenType = Lexer.TokenKind.FUNCTION_ARGUMENTS; var tmpParamsLeaf = new Syntaxer.OperatorLeafs.ParamsLeaf(this.Context); var tmpRez = tmpParamsLeaf.Run(); mCurrNode.AdditionalItems = tmpParamsLeaf.RootNode.AdditionalItems; return tmpRez; } } ChangeNodes(token); if (token.TokenType == Lexer.TokenKind.VARIABLE) { mCurrNode.Value = token.Text; mCurrNode.TokenType = token.TokenType; mCurrNode.Priority = TokenPriority(token.TokenType); mCurrNode.Line = token.Line; mCurrNode.Pos = token.Pos; return ResultOfProcess.Continue; } if (token.TokenType == Lexer.TokenKind.String) { mCurrNode.Value = token.Text; mCurrNode.TokenType = token.TokenType; mCurrNode.Priority = TokenPriority(token.TokenType); mCurrNode.Line = token.Line; mCurrNode.Pos = token.Pos; return ResultOfProcess.Continue; } if (token.TokenType == Lexer.TokenKind.OPERATOR_GET_MEMBER) { mCurrNode.Value = token.Text; mCurrNode.TokenType = token.TokenType; mCurrNode.Priority = TokenPriority(token.TokenType); mCurrNode.Line = token.Line; mCurrNode.Pos = token.Pos; return ResultOfProcess.Continue; } if (token.TokenType == Lexer.TokenKind.MEMBER) { mCurrNode.Value = token.Text; mCurrNode.TokenType = token.TokenType; mCurrNode.Priority = TokenPriority(token.TokenType); mCurrNode.Line = token.Line; mCurrNode.Pos = token.Pos; return ResultOfProcess.Continue; } var tmpSb = new StringBuilder(); tmpSb.Append("Unexpected token \""); tmpSb.Append(token.Text); tmpSb.Append("\""); var tmpExcept = new SyntaxerException(tmpSb.ToString()); tmpExcept.Line = token.Line; tmpExcept.Pos = token.Pos; tmpExcept.TokenText = token.Text; throw tmpExcept; }