public static Lexer Create(StreamReader reader, ErrorList errors) { Lexer lex = new Lexer(reader, errors); lex.MoveNext(); return lex; }
private Symbol ParseLValue(Lexer lvalLexer) { if (lvalLexer.CurrentToken != Token.Identifier) { AddLValueError(); return null; } Symbol symbol = _context.SymbolTable.Lookup(lvalLexer.GetLexeme()); if (symbol == null) { AddLValueError(); return null; } IrisType lhs = symbol.Type; lvalLexer.MoveNext(); if (lhs.IsArray) { // We should have an open bracket (We don't support changing the array value itself) if (lvalLexer.CurrentToken != Token.ChrOpenBracket) { AddLValueError(); return null; } EmitLoadSymbol(symbol, SymbolLoadMode.Raw); lvalLexer.MoveNext(); if (lvalLexer.CurrentToken != Token.Number) { AddLValueError(); return null; } int index = lvalLexer.ParseInteger(); MethodGenerator.PushIntConst(index); lvalLexer.MoveNext(); if (lvalLexer.CurrentToken != Token.ChrCloseBracket) { AddLValueError(); return null; } } else if (lhs.IsByRef) { EmitLoadSymbol(symbol, SymbolLoadMode.Raw); } return symbol; }