Exemplo n.º 1
0
 public Expression ParseAdressor(IdentifierExpression.State state = IdentifierExpression.State.Call)
 {
     if (Match(tkSqLbra, 1))
     {
         return(ParseArrayElementExpression());
     }
     else
     {
         return(ParseIdentifierExpression(state));
     }
 }
Exemplo n.º 2
0
        public Expression ParseIdentifierExpression(IdentifierExpression.State state, InnerType type = null)
        {
            if (state == IdentifierExpression.State.Call)
            {
                if (!Match(tkIdentifier))
                {
                    return(new ErroredExpression(new IdentifierExpected(Lexer.CurrentToken)));
                }
                IdentifierExpression identifier = new IdentifierExpression(Lexer.CurrentToken, state);
                Lexer.GetNextToken();
                return(identifier);
            }
            else
            {
                if (!Match(tkIdentifier))
                {
                    return(new ErroredExpression(new IdentifierExpected(Lexer.CurrentToken)));
                }
                IdentifierExpression identifierExpression;

                if (type == null)
                {
                    identifierExpression = new IdentifierExpression(Lexer.CurrentToken, state);
                }
                else
                {
                    if (type is InnerTypes.Void)
                    {
                        return(new ErroredExpression(new SyntaxErrorMessage("Type [void] cannot be used as variable type", Lexer.PreviousToken)));
                    }
                    identifierExpression = new IdentifierExpression(Lexer.CurrentToken, type, state);
                }
                Lexer.GetNextToken();
                return(identifierExpression);
            }
        }