public static Lexer Create(StreamReader reader, ErrorList errors) { Lexer lex = new Lexer(reader, errors); lex.MoveNext(); return lex; }
protected CompilerContext(string filePath, StreamReader inputReader, Importer importer, IEmitter emitter, CompilationFlags flags) { FilePath = filePath; Flags = flags; Emitter = emitter; CompileErrors = new ErrorList(); Importer = importer; SymbolTable = new SymbolTable(); Lexer = Lexer.Create(inputReader, CompileErrors); }
public Translator(CompilerContext context) { MethodGenerator = new MethodGenerator(context); _context = context; _lexer = context.Lexer; _symbolTable = context.SymbolTable; _lastParsedPosition = _lexer.TokenStartPosition; _lexeme = string.Empty; }
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; }
public ExpressionTranslator(DebugCompilerContext context) : base(context) { _context = context; _lexer = context.Lexer; }