Esempio n. 1
0
        private DotVar ParseDotVar(PrefixExp prefixExp = null)
        {
            var node = DotVar.CreateBuilder();
            node.Kind = SyntaxKind.DotVar;
            node.StartPosition = this.textPosition;

            if (prefixExp == null)
            {
                node.PrefixExp = ParsePrefixExp().ToBuilder();
            }
            else
            {
                node.PrefixExp = prefixExp.ToBuilder();
            }

            node.DotOperator = GetExpectedToken(SyntaxKind.Dot);
            node.NameIdentifier = GetExpectedToken(SyntaxKind.Identifier);
            node.Length = this.textPosition - node.StartPosition;
            return node.ToImmutable();
        }
Esempio n. 2
0
        private SquareBracketVar ParseSquareBracketVar(PrefixExp prefixExp = null)
        {
            var node = SquareBracketVar.CreateBuilder();
            node.Kind = SyntaxKind.SquareBracketVar;
            node.StartPosition = this.textPosition;

            if (prefixExp == null)
            {
                node.PrefixExp = ParsePrefixExp().ToBuilder();
            }
            else
            {
                node.PrefixExp = prefixExp.ToBuilder();
            }

            node.OpenBracket = GetExpectedToken(SyntaxKind.OpenBracket);
            node.Exp = ParseExpression().ToBuilder();
            node.CloseBracket = GetExpectedToken(SyntaxKind.CloseBracket);
            node.Length = this.textPosition - node.StartPosition;
            return node.ToImmutable();
        }
Esempio n. 3
0
        private FunctionCallPrefixexp ParseFunctionCallPrefixp(PrefixExp prefixExp = null)
        {

            var node = FunctionCallPrefixexp.CreateBuilder();
            node.Kind = SyntaxKind.FunctionCallExp;
            node.StartPosition = this.textPosition;

            if (prefixExp != null)
            {
                node.PrefixExp = prefixExp.ToBuilder();
            }
            else
            {
                node.PrefixExp = ParsePrefixExp().ToBuilder();
            }

            if (ParseExpected(SyntaxKind.Colon))
            {
                node.Colon = currentToken;
                node.Name = GetExpectedToken(SyntaxKind.Identifier);
            }

            node.Args = ParseArgs().ToBuilder();
            node.Length = this.textPosition - node.StartPosition;
            return node.ToImmutable();
        }
Esempio n. 4
0
        private PrefixExp ParsePrefixExp(PrefixExp prefixExp = null, bool parsingFunctionCallStatement = false)
        {
            if (prefixExp == null)
            {
                switch (Peek().Kind)
                {
                    case SyntaxKind.Identifier:
                        prefixExp = ParseNameVar();
                        break;
                    case SyntaxKind.OpenParen:
                        prefixExp = ParseParenPrefixExp();
                        break;
                    default:
                        throw new InvalidOperationException();
                }
            }

            int tempPosition = 0;

            while (ContinueParsingPrefixExp(Peek().Kind))
            {
                switch (Peek().Kind)
                {
                    case SyntaxKind.Dot:
                        prefixExp = ParseDotVar(prefixExp);
                        break;
                    case SyntaxKind.OpenBracket:
                        prefixExp = ParseSquareBracketVar(prefixExp);
                        break;
                    case SyntaxKind.String:
                    case SyntaxKind.OpenParen:
                    case SyntaxKind.OpenCurlyBrace:
                    case SyntaxKind.Colon:
                        tempPosition = positionInTokenList;
                        prefixExp = ParseFunctionCallPrefixp(prefixExp);
                        break;
                    default:
                        return prefixExp;
                }
            }

            if (parsingFunctionCallStatement)
            {
                if (prefixExp is FunctionCallPrefixexp)
                {
                    this.SetPositionInTokenList(tempPosition);
                    return (prefixExp as FunctionCallPrefixexp).PrefixExp;
                }
                else
                {
                    return prefixExp;
                }
            }

            return prefixExp;
        }
Esempio n. 5
0
 private Var ParsePotentialVarWithPrefixExp(PrefixExp prefixExp)
 {
     if (Peek().Kind == SyntaxKind.OpenBracket)
     {
         return ParseSquareBracketVar(prefixExp);
     }
     else
     {
         //Arbitrarily assuming it's a dot var as that is the only valid alternative
         //when there is no open bracket... will log errors, if the requirements for dot var are not found
         return ParseDotVar(prefixExp);
     }
 }