public Expression ParseAdressor(IdentifierExpression.State state = IdentifierExpression.State.Call) { if (Match(tkSqLbra, 1)) { return(ParseArrayElementExpression()); } else { return(ParseIdentifierExpression(state)); } }
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); } }