コード例 #1
0
ファイル: Parser.cs プロジェクト: PhilipBrockmeyer/Wren
        private StatementNode ParseStatement(Token initialToken)
        {
            if (initialToken.TokenType == Tokens.EndOfLine)
                return null;

            if (initialToken.TokenType == Tokens.Identifier)
            {
                StatementNode statement = new StatementNode();
                var instructionTokens = new List<Token>();

                Token t = _lex.GetNextToken();

                if (t.TokenType == Tokens.Colon)
                {
                    statement.Label = initialToken.SourceText;                    

                    t = _lex.GetNextToken();                    
                }
                else
                {
                    instructionTokens.Add(initialToken);
                }
               
                while (t.TokenType != Tokens.EndOfLine)
                {
                    instructionTokens.Add(t);
                    t = _lex.GetNextToken();
                }

                ParseInstruction(statement, instructionTokens);
                return statement;
            }

            throw new UnexprectedTokenException(String.Format("Unexprected token: {0}", initialToken));
        }
コード例 #2
0
ファイル: Parser.cs プロジェクト: PhilipBrockmeyer/Wren
        private ParameterNode ParseParemeter(Token token)
        {
            if (token.TokenType == Tokens.Identifier)
                return new ParameterNode() { Identifier = token.SourceText };

            if (token.TokenType == Tokens.Number)
            {
                Int32 numberLength = 0;

                if (token.SourceText.Length == 3 || (token.SourceText.StartsWith("0") && token.SourceText.Length == 4))
                    numberLength = 8;
                else if (token.SourceText.Length == 3 || (token.SourceText.StartsWith("0") && token.SourceText.Length == 4))
                    numberLength = 16;
                else
                    throw new ApplicationException(String.Format("Invalid length for literal number: {0}", token.SourceText));

                return new ParameterNode() { Number = GetNumber(token.SourceText), NumberSize = numberLength };
            }

            throw new UnexprectedTokenException(String.Format("Unexprected token: {0}", token));
        }