public static int Main(string [] args) { if (args.Length != 1) { Console.WriteLine("Usage : ilasm [filename]"); return(1); } StreamReader reader = File.OpenText(args [0]); ILTokenizer scanner = new ILTokenizer(reader); bool testScanner = true; if (testScanner) { ILToken tok; while ((tok = scanner.NextToken) != ILToken.EOF) { Console.WriteLine(tok); } } else { ILParser parser = new ILParser(new CodeGen()); parser.yyparse(new ScannerAdapter(scanner), new yydebug.yyDebugSimple()); CodeGen cg = parser.CodeGen; int n = cg.ClassCount; cg.Emit(); } return(0); }
private bool ScanTokenAndProvideInfoAboutIt(ILTokenizer lexer, string span, ref int begin, ref int length, ref IClassificationType classification) { var location = (Location)lexer.Location.Clone(); var token = lexer.GetNextToken(); switch (token.TokenId) { case Token.EOF: return(false); case Token.ID: classification = _standardClassificationService.Identifier; break; case Token.INSTR_NONE: case Token.INSTR_VAR: case Token.INSTR_I: case Token.INSTR_I8: case Token.INSTR_R: case Token.INSTR_BRTARGET: case Token.INSTR_METHOD: case Token.INSTR_NEWOBJ: case Token.INSTR_FIELD: case Token.INSTR_TYPE: case Token.INSTR_STRING: case Token.INSTR_SIG: case Token.INSTR_RVA: case Token.INSTR_TOK: case Token.INSTR_SWITCH: case Token.INSTR_PHI: case Token.INSTR_LOCAL: case Token.INSTR_PARAM: classification = _standardClassificationService.Keyword; break; case Token.K_AT: case Token.K_AS: case Token.K_IMPLICITCOM: case Token.K_IMPLICITRES: case Token.K_NOAPPDOMAIN: case Token.K_NOPROCESS: case Token.K_NOMACHINE: case Token.K_EXTERN: case Token.K_INSTANCE: case Token.K_EXPLICIT: case Token.K_DEFAULT: case Token.K_VARARG: case Token.K_UNMANAGED: case Token.K_CDECL: case Token.K_STDCALL: case Token.K_THISCALL: case Token.K_FASTCALL: case Token.K_MARSHAL: case Token.K_IN: case Token.K_OUT: case Token.K_OPT: case Token.K_STATIC: case Token.K_PUBLIC: case Token.K_PRIVATE: case Token.K_FAMILY: case Token.K_INITONLY: case Token.K_RTSPECIALNAME: case Token.K_STRICT: case Token.K_SPECIALNAME: case Token.K_ASSEMBLY: case Token.K_FAMANDASSEM: case Token.K_FAMORASSEM: case Token.K_PRIVATESCOPE: case Token.K_LITERAL: case Token.K_NOTSERIALIZED: case Token.K_VALUE: case Token.K_NOT_IN_GC_HEAP: case Token.K_INTERFACE: case Token.K_SEALED: case Token.K_ABSTRACT: case Token.K_AUTO: case Token.K_SEQUENTIAL: case Token.K_ANSI: case Token.K_UNICODE: case Token.K_AUTOCHAR: case Token.K_BESTFIT: case Token.K_IMPORT: case Token.K_SERIALIZABLE: case Token.K_NESTED: case Token.K_LATEINIT: case Token.K_EXTENDS: case Token.K_IMPLEMENTS: case Token.K_FINAL: case Token.K_VIRTUAL: case Token.K_HIDEBYSIG: case Token.K_NEWSLOT: case Token.K_UNMANAGEDEXP: case Token.K_PINVOKEIMPL: case Token.K_NOMANGLE: case Token.K_OLE: case Token.K_LASTERR: case Token.K_WINAPI: case Token.K_NATIVE: case Token.K_IL: case Token.K_CIL: case Token.K_OPTIL: case Token.K_MANAGED: case Token.K_FORWARDREF: case Token.K_RUNTIME: case Token.K_INTERNALCALL: case Token.K_SYNCHRONIZED: case Token.K_NOINLINING: case Token.K_CUSTOM: case Token.K_FIXED: case Token.K_SYSSTRING: case Token.K_ARRAY: case Token.K_VARIANT: case Token.K_CURRENCY: case Token.K_SYSCHAR: case Token.K_VOID: case Token.K_BOOL: case Token.K_INT8: case Token.K_INT16: case Token.K_INT32: case Token.K_INT64: case Token.K_FLOAT32: case Token.K_FLOAT64: case Token.K_ERROR: case Token.K_UNSIGNED: case Token.K_UINT: case Token.K_UINT8: case Token.K_UINT16: case Token.K_UINT32: case Token.K_UINT64: case Token.K_DECIMAL: case Token.K_DATE: case Token.K_BSTR: case Token.K_LPSTR: case Token.K_LPWSTR: case Token.K_LPTSTR: case Token.K_OBJECTREF: case Token.K_IUNKNOWN: case Token.K_IDISPATCH: case Token.K_STRUCT: case Token.K_SAFEARRAY: case Token.K_INT: case Token.K_BYVALSTR: case Token.K_TBSTR: case Token.K_LPVOID: case Token.K_ANY: case Token.K_FLOAT: case Token.K_LPSTRUCT: case Token.K_NULL: case Token.K_PTR: case Token.K_VECTOR: case Token.K_HRESULT: case Token.K_CARRAY: case Token.K_USERDEFINED: case Token.K_RECORD: case Token.K_FILETIME: case Token.K_BLOB: case Token.K_STREAM: case Token.K_STORAGE: case Token.K_STREAMED_OBJECT: case Token.K_STORED_OBJECT: case Token.K_BLOB_OBJECT: case Token.K_CF: case Token.K_CLSID: case Token.K_METHOD: case Token.K_CLASS: case Token.K_PINNED: case Token.K_MODREQ: case Token.K_MODOPT: case Token.K_TYPEDREF: case Token.K_TYPE: case Token.K_WCHAR: case Token.K_CHAR: case Token.K_FROMUNMANAGED: case Token.K_CALLMOSTDERIVED: case Token.K_BYTEARRAY: case Token.K_WITH: case Token.K_INIT: case Token.K_TO: case Token.K_CATCH: case Token.K_FILTER: case Token.K_FINALLY: case Token.K_FAULT: case Token.K_HANDLER: case Token.K_TLS: case Token.K_FIELD: case Token.K_PROPERTY: case Token.K_REQUEST: case Token.K_DEMAND: case Token.K_ASSERT: case Token.K_DENY: case Token.K_PERMITONLY: case Token.K_LINKCHECK: case Token.K_INHERITCHECK: case Token.K_REQMIN: case Token.K_REQOPT: case Token.K_REQREFUSE: case Token.K_PREJITGRANT: case Token.K_PREJITDENY: case Token.K_NONCASDEMAND: case Token.K_NONCASLINKDEMAND: case Token.K_NONCASINHERITANCE: case Token.K_READONLY: case Token.K_NOMETADATA: case Token.K_ALGORITHM: case Token.K_FULLORIGIN: case Token.K_ENABLEJITTRACKING: case Token.K_DISABLEJITOPTIMIZER: case Token.K_RETARGETABLE: case Token.K_PRESERVESIG: case Token.K_BEFOREFIELDINIT: case Token.K_ALIGNMENT: case Token.K_NULLREF: case Token.K_VALUETYPE: case Token.K_COMPILERCONTROLLED: case Token.K_REQSECOBJ: case Token.K_ENUM: case Token.K_OBJECT: case Token.K_STRING: case Token.K_TRUE: case Token.K_FALSE: case Token.K_IS: case Token.K_ON: case Token.K_OFF: case Token.K_CHARMAPERROR: classification = _standardClassificationService.Keyword; break; case Token.D_ADDON: case Token.D_ALGORITHM: case Token.D_ASSEMBLY: case Token.D_BACKING: case Token.D_BLOB: case Token.D_CAPABILITY: case Token.D_CCTOR: case Token.D_CLASS: case Token.D_COMTYPE: case Token.D_CONFIG: case Token.D_IMAGEBASE: case Token.D_CORFLAGS: case Token.D_CTOR: case Token.D_CUSTOM: case Token.D_DATA: case Token.D_EMITBYTE: case Token.D_ENTRYPOINT: case Token.D_EVENT: case Token.D_EXELOC: case Token.D_EXPORT: case Token.D_FIELD: case Token.D_FILE: case Token.D_FIRE: case Token.D_GET: case Token.D_HASH: case Token.D_IMPLICITCOM: case Token.D_LANGUAGE: case Token.D_LINE: case Token.D_XLINE: case Token.D_LOCALE: case Token.D_LOCALS: case Token.D_MANIFESTRES: case Token.D_MAXSTACK: case Token.D_METHOD: case Token.D_MIME: case Token.D_MODULE: case Token.D_MRESOURCE: case Token.D_NAMESPACE: case Token.D_ORIGINATOR: case Token.D_OS: case Token.D_OTHER: case Token.D_OVERRIDE: case Token.D_PACK: case Token.D_PARAM: case Token.D_PERMISSION: case Token.D_PERMISSIONSET: case Token.D_PROCESSOR: case Token.D_PROPERTY: case Token.D_PUBLICKEY: case Token.D_PUBLICKEYTOKEN: case Token.D_REMOVEON: case Token.D_SET: case Token.D_SIZE: case Token.D_STACKRESERVE: case Token.D_SUBSYSTEM: case Token.D_TITLE: case Token.D_TRY: case Token.D_VER: case Token.D_VTABLE: case Token.D_VTENTRY: case Token.D_VTFIXUP: case Token.D_ZEROINIT: classification = _standardClassificationService.Keyword; break; case Token.INT32: case Token.INT64: case Token.FLOAT64: classification = _standardClassificationService.NumberLiteral; break; case Token.QSTRING: case Token.SQSTRING: classification = _standardClassificationService.StringLiteral; break; case Token.SL_COMMENT: classification = _standardClassificationService.Comment; break; case Token.ML_COMMENT: classification = _standardClassificationService.Comment; return(true); default: classification = _standardClassificationService.FormalLanguage; break; } ComputeTokenInfo(span, location, lexer.Location, out begin, out length); return(true); }