Lexical tokens ID - C style alphaNumeric identifier (e.g. Hello_There2) DOTTEDNAME - Sequence of dot-separated IDs (e.g. System.Object) QSTRING - C style quoted string (e.g. "hi\n") SQSTRING - C style singlely quoted string(e.g. 'hi') INT32 - C style 32 bit integer (e.g. 235, 03423, 0x34FFF) INT64 - C style 64 bit integer (e.g. -2353453636235234, 0x34FFFFFFFFFF) FLOAT64 - C style floating point number (e.g. -0.2323, 354.3423, 3435.34E-5) INSTR_* - IL instructions of a particular class (see opcode.def). HEXBYTE - 1- or 2-digit hexadecimal number (e.g., A2, F0). Auxiliary lexical tokens TYPEDEF_T - Aliased class (TypeDef or TypeRef). TYPEDEF_M - Aliased method. TYPEDEF_F - Aliased field. TYPEDEF_TS - Aliased type specification (TypeSpec). TYPEDEF_MR - Aliased field/method reference (MemberRef). TYPEDEF_CA - Aliased Custom Attribute. ---------------------------------------------------------------------------------- START : decls ; decls : /* EMPTY */ | decls decl ; /* Module-level declarations */ decl : classHead '{' classDecls '}' | nameSpaceHead '{' decls '}' | methodHead methodDecls '}' | fieldDecl | dataDecl | vtableDecl | vtfixupDecl | extSourceSpec | fileDecl | assemblyHead '{' assemblyDecls '}' | assemblyRefHead '{' assemblyRefDecls '}' | exptypeHead '{' exptypeDecls '}' | manifestResHead '{' manifestResDecls '}' | moduleHead | secDecl | customAttrDecl | '.subsystem' int32 | '.corflags' int32 | '.file' 'alignment' int32 | '.imagebase' int64 | '.stackreserve' int64 | languageDecl | typedefDecl | compControl | '.typelist' '{' classNameSeq '}' | '.mscorlib' ; classNameSeq : /* EMPTY */ | className classNameSeq ; compQstring : QSTRING | compQstring '+' QSTRING ; languageDecl : '.language' SQSTRING | '.language' SQSTRING ',' SQSTRING | '.language' SQSTRING ',' SQSTRING ',' SQSTRING ; /* Basic tokens */ id : ID | SQSTRING ; dottedName : id | DOTTEDNAME | dottedName '.' dottedName ; int32 : INT32 ; int64 : INT64 | INT32 ; float64 : FLOAT64 | 'float32' '(' int32 ')' | 'float64' '(' int64 ')' ; /* Aliasing of types, type specs, methods, fields and custom attributes */ typedefDecl : '.typedef' type 'as' dottedName | '.typedef' className 'as' dottedName | '.typedef' memberRef 'as' dottedName | '.typedef' customDescr 'as' dottedName | '.typedef' customDescrWithOwner 'as' dottedName ; /* Compilation control directives are processed within yylex(), displayed here just for grammar completeness */ compControl : P_DEFINE dottedName | P_DEFINE dottedName compQstring | P_UNDEF dottedName | P_IFDEF dottedName | P_IFNDEF dottedName | P_ELSE | P_ENDIF | P_INCLUDE QSTRING | ';' ; /* Custom attribute declarations */ customDescr : '.custom' customType | '.custom' customType '=' compQstring | '.custom' customType '=' '{' customBlobDescr '}' | customHead bytes ')' ; customDescrWithOwner : '.custom' '(' ownerType ')' customType | '.custom' '(' ownerType ')' customType '=' compQstring | '.custom' '(' ownerType ')' customType '=' '{' customBlobDescr '}' | customHeadWithOwner bytes ')' ; customHead : '.custom' customType '=' '(' ; customHeadWithOwner : '.custom' '(' ownerType ')' customType '=' '(' ; customType : methodRef ; ownerType : typeSpec | memberRef ; /* Verbal description of custom attribute initialization blob */ customBlobDescr : customBlobArgs customBlobNVPairs ; customBlobArgs : /* EMPTY */ | customBlobArgs serInit | customBlobArgs compControl ; customBlobNVPairs : /* EMPTY */ | customBlobNVPairs fieldOrProp serializType dottedName '=' serInit | customBlobNVPairs compControl ; fieldOrProp : 'field' | 'property' ; customAttrDecl : customDescr | customDescrWithOwner | TYPEDEF_CA ; serializType : simpleType | 'type' | 'object' | 'enum' 'class' SQSTRING | 'enum' className | serializType '[' ']' ; /* Module declaration */ moduleHead : '.module' | '.module' dottedName | '.module' 'extern' dottedName ; /* VTable Fixup table declaration */ vtfixupDecl : '.vtfixup' '[' int32 ']' vtfixupAttr 'at' id ; vtfixupAttr : /* EMPTY */ | vtfixupAttr 'int32' | vtfixupAttr 'int64' | vtfixupAttr 'fromunmanaged' | vtfixupAttr 'callmostderived' | vtfixupAttr 'retainappdomain' ; vtableDecl : vtableHead bytes ')' /* deprecated */ ; vtableHead : '.vtable' '=' '(' /* deprecated */ ; /* Namespace and class declaration */ nameSpaceHead : '.namespace' dottedName ; _class : '.class' ; classHeadBegin : _class classAttr dottedName typarsClause ; classHead : classHeadBegin extendsClause implClause ; classAttr : /* EMPTY */ | classAttr 'public' | classAttr 'private' | classAttr 'value' | classAttr 'enum' | classAttr 'interface' | classAttr 'sealed' | classAttr 'abstract' | classAttr 'auto' | classAttr 'sequential' | classAttr 'explicit' | classAttr 'ansi' | classAttr 'unicode' | classAttr 'autochar' | classAttr 'import' | classAttr 'serializable' | classAttr 'nested' 'public' | classAttr 'nested' 'private' | classAttr 'nested' 'family' | classAttr 'nested' 'assembly' | classAttr 'nested' 'famandassem' | classAttr 'nested' 'famorassem' | classAttr 'beforefieldinit' | classAttr 'specialname' | classAttr 'rtspecialname' | classAttr 'flags' '(' int32 ')' ; extendsClause : /* EMPTY */ | 'extends' typeSpec ; implClause : /* EMPTY */ | 'implements' implList ; classDecls : /* EMPTY */ | classDecls classDecl ; implList : implList ',' typeSpec | typeSpec ; /* Generic type parameters declaration */ typeList : /* EMPTY */ | typeListNotEmpty ; typeListNotEmpty : typeSpec | typeListNotEmpty ',' typeSpec ; typarsClause : /* EMPTY */ | '<' typars '>' ; typarAttrib : '+' | '-' | 'class' | 'valuetype' | '.ctor' ; typarAttribs : /* EMPTY */ | typarAttrib typarAttribs ; typars : typarAttribs tyBound dottedName typarsRest | typarAttribs dottedName typarsRest ; typarsRest : /* EMPTY */ | ',' typars ; tyBound : '(' typeList ')' ; genArity : /* EMPTY */ | genArityNotEmpty ; genArityNotEmpty : '<' '[' int32 ']' '>' ; /* Class body declarations */ classDecl : methodHead methodDecls '}' | classHead '{' classDecls '}' | eventHead '{' eventDecls '}' | propHead '{' propDecls '}' | fieldDecl | dataDecl | secDecl | extSourceSpec | customAttrDecl | '.size' int32 | '.pack' int32 | exportHead '{' exptypeDecls '}' | '.override' typeSpec '::' methodName 'with' callConv type typeSpec '::' methodName '(' sigArgs0 ')' | '.override' 'method' callConv type typeSpec '::' methodName genArity '(' sigArgs0 ')' 'with' 'method' callConv type typeSpec '::' methodName genArity '(' sigArgs0 ')' | languageDecl | compControl | 'param' 'type' '[' int32 ']' | 'param' 'type' dottedName ; /* Field declaration */ fieldDecl : '.field' repeatOpt fieldAttr type dottedName atOpt initOpt ; fieldAttr : /* EMPTY */ | fieldAttr 'static' | fieldAttr 'public' | fieldAttr 'private' | fieldAttr 'family' | fieldAttr 'initonly' | fieldAttr 'rtspecialname' /**/ | fieldAttr 'specialname' /* commented out because PInvoke for fields is not supported by EE | fieldAttr 'pinvokeimpl' '(' compQstring 'as' compQstring pinvAttr ')' | fieldAttr 'pinvokeimpl' '(' compQstring pinvAttr ')' | fieldAttr 'pinvokeimpl' '(' pinvAttr ')' */ | fieldAttr 'marshal' '(' nativeType ')' | fieldAttr 'assembly' | fieldAttr 'famandassem' | fieldAttr 'famorassem' | fieldAttr 'privatescope' | fieldAttr 'literal' | fieldAttr 'notserialized' | fieldAttr 'flags' '(' int32 ')' ; atOpt : /* EMPTY */ | 'at' id ; initOpt : /* EMPTY */ | '=' fieldInit ; repeatOpt : /* EMPTY */ | '[' int32 ']' ; /* Method referencing */ methodRef : callConv type typeSpec '::' methodName tyArgs0 '(' sigArgs0 ')' | callConv type typeSpec '::' methodName genArityNotEmpty '(' sigArgs0 ')' | callConv type methodName tyArgs0 '(' sigArgs0 ')' | callConv type methodName genArityNotEmpty '(' sigArgs0 ')' | mdtoken | TYPEDEF_M | TYPEDEF_MR ; callConv : 'instance' callConv | 'explicit' callConv | callKind | 'callconv' '(' int32 ')' ; callKind : /* EMPTY */ | 'default' | 'vararg' | 'unmanaged' 'cdecl' | 'unmanaged' 'stdcall' | 'unmanaged' 'thiscall' | 'unmanaged' 'fastcall' ; mdtoken : 'mdtoken' '(' int32 ')' ; memberRef : methodSpec methodRef | 'field' type typeSpec '::' dottedName | 'field' type dottedName | 'field' TYPEDEF_F | 'field' TYPEDEF_MR | mdtoken ; /* Event declaration */ eventHead : '.event' eventAttr typeSpec dottedName | '.event' eventAttr dottedName ; eventAttr : /* EMPTY */ | eventAttr 'rtspecialname' /**/ | eventAttr 'specialname' ; eventDecls : /* EMPTY */ | eventDecls eventDecl ; eventDecl : '.addon' methodRef | '.removeon' methodRef | '.fire' methodRef | '.other' methodRef | extSourceSpec | customAttrDecl | languageDecl | compControl ; /* Property declaration */ propHead : '.property' propAttr callConv type dottedName '(' sigArgs0 ')' initOpt ; propAttr : /* EMPTY */ | propAttr 'rtspecialname' /**/ | propAttr 'specialname' ; propDecls : /* EMPTY */ | propDecls propDecl ; propDecl : '.set' methodRef | '.get' methodRef | '.other' methodRef | customAttrDecl | extSourceSpec | languageDecl | compControl ; /* Method declaration */ methodHeadPart1 : '.method' ; marshalClause : /* EMPTY */ | 'marshal' '(' nativeType ')' ; methodHead : methodHeadPart1 methAttr callConv paramAttr type marshalClause methodName typarsClause'(' sigArgs0 ')' implAttr '{' ; methAttr : /* EMPTY */ | methAttr 'static' | methAttr 'public' | methAttr 'private' | methAttr 'family' | methAttr 'final' | methAttr 'specialname' | methAttr 'virtual' | methAttr 'strict' | methAttr 'abstract' | methAttr 'assembly' | methAttr 'famandassem' | methAttr 'famorassem' | methAttr 'privatescope' | methAttr 'hidebysig' | methAttr 'newslot' | methAttr 'rtspecialname' /**/ | methAttr 'unmanagedexp' | methAttr 'reqsecobj' | methAttr 'flags' '(' int32 ')' | methAttr 'pinvokeimpl' '(' compQstring 'as' compQstring pinvAttr ')' | methAttr 'pinvokeimpl' '(' compQstring pinvAttr ')' | methAttr 'pinvokeimpl' '(' pinvAttr ')' ; pinvAttr : /* EMPTY */ | pinvAttr 'nomangle' | pinvAttr 'ansi' | pinvAttr 'unicode' | pinvAttr 'autochar' | pinvAttr 'lasterr' | pinvAttr 'winapi' | pinvAttr 'cdecl' | pinvAttr 'stdcall' | pinvAttr 'thiscall' | pinvAttr 'fastcall' | pinvAttr 'bestfit' ':' 'on' | pinvAttr 'bestfit' ':' 'off' | pinvAttr 'charmaperror' ':' 'on' | pinvAttr 'charmaperror' ':' 'off' | pinvAttr 'flags' '(' int32 ')' ; methodName : '.ctor' | '.cctor' | dottedName ; paramAttr : /* EMPTY */ | paramAttr '[' 'in' ']' | paramAttr '[' 'out' ']' | paramAttr '[' 'opt' ']' | paramAttr '[' int32 ']' ; implAttr : /* EMPTY */ | implAttr 'native' | implAttr 'cil' | implAttr 'optil' | implAttr 'managed' | implAttr 'unmanaged' | implAttr 'forwardref' | implAttr 'preservesig' | implAttr 'runtime' | implAttr 'internalcall' | implAttr 'synchronized' | implAttr 'noinlining' | implAttr 'nooptimization' | implAttr 'flags' '(' int32 ')' ; localsHead : '.locals' ; methodDecls : /* EMPTY */ | methodDecls methodDecl ; methodDecl : '.emitbyte' int32 | sehBlock | '.maxstack' int32 | localsHead '(' sigArgs0 ')' | localsHead 'init' '(' sigArgs0 ')' | '.entrypoint' | '.zeroinit' | dataDecl | instr | id ':' | secDecl | extSourceSpec | languageDecl | customAttrDecl | compControl | '.export' '[' int32 ']' | '.export' '[' int32 ']' 'as' id | '.vtentry' int32 ':' int32 | '.override' typeSpec '::' methodName | '.override' 'method' callConv type typeSpec '::' methodName genArity '(' sigArgs0 ')' | scopeBlock | 'param' 'type' '[' int32 ']' | 'param' 'type' dottedName | 'param' '[' int32 ']' initOpt ; scopeBlock : scopeOpen methodDecls '}' ; scopeOpen : '{' ; /* Structured exception handling directives */ sehBlock : tryBlock sehClauses ; sehClauses : sehClause sehClauses | sehClause ; tryBlock : tryHead scopeBlock | tryHead id 'to' id | tryHead int32 'to' int32 ; tryHead : '.try' ; sehClause : catchClause handlerBlock | filterClause handlerBlock | finallyClause handlerBlock | faultClause handlerBlock ; filterClause : filterHead scopeBlock | filterHead id | filterHead int32 ; filterHead : 'filter' ; catchClause : 'catch' typeSpec ; finallyClause : 'finally' ; faultClause : 'fault' ; handlerBlock : scopeBlock | 'handler' id 'to' id | 'handler' int32 'to' int32 ; /* Data declaration */ dataDecl : ddHead ddBody ; ddHead : '.data' tls id '=' | '.data' tls ; tls : /* EMPTY */ | 'tls' | 'cil' ; ddBody : '{' ddItemList '}' | ddItem ; ddItemList : ddItem ',' ddItemList | ddItem ; ddItemCount : /* EMPTY */ | '[' int32 ']' ; ddItem : 'char' '*' '(' compQstring ')' | '&' '(' id ')' | bytearrayhead bytes ')' | 'float32' '(' float64 ')' ddItemCount | 'float64' '(' float64 ')' ddItemCount | 'int64' '(' int64 ')' ddItemCount | 'int32' '(' int32 ')' ddItemCount | 'int16' '(' int32 ')' ddItemCount | 'int8' '(' int32 ')' ddItemCount | 'float32' ddItemCount | 'float64' ddItemCount | 'int64' ddItemCount | 'int32' ddItemCount | 'int16' ddItemCount | 'int8' ddItemCount ; /* Default values declaration for fields, parameters and verbal form of CA blob description */ fieldSerInit : 'float32' '(' float64 ')' | 'float64' '(' float64 ')' | 'float32' '(' int32 ')' | 'float64' '(' int64 ')' | 'int64' '(' int64 ')' | 'int32' '(' int32 ')' | 'int16' '(' int32 ')' | 'int8' '(' int32 ')' | 'unsigned' 'int64' '(' int64 ')' | 'unsigned' 'int32' '(' int32 ')' | 'unsigned' 'int16' '(' int32 ')' | 'unsigned' 'int8' '(' int32 ')' | 'uint64' '(' int64 ')' | 'uint32' '(' int32 ')' | 'uint16' '(' int32 ')' | 'uint8' '(' int32 ')' | 'char' '(' int32 ')' | 'bool' '(' truefalse ')' | bytearrayhead bytes ')' ; bytearrayhead : 'bytearray' '(' ; bytes : /* EMPTY */ | hexbytes ; hexbytes : HEXBYTE | hexbytes HEXBYTE ; /* Field/parameter initialization */ fieldInit : fieldSerInit | compQstring | 'nullref' ; /* Values for verbal form of CA blob description */ serInit : fieldSerInit | 'string' '(' 'nullref' ')' | 'string' '(' SQSTRING ')' | 'type' '(' 'class' SQSTRING ')' | 'type' '(' className ')' | 'type' '(' 'nullref' ')' | 'object' '(' serInit ')' | 'float32' '[' int32 ']' '(' f32seq ')' | 'float64' '[' int32 ']' '(' f64seq ')' | 'int64' '[' int32 ']' '(' i64seq ')' | 'int32' '[' int32 ']' '(' i32seq ')' | 'int16' '[' int32 ']' '(' i16seq ')' | 'int8' '[' int32 ']' '(' i8seq ')' | 'uint64' '[' int32 ']' '(' i64seq ')' | 'uint32' '[' int32 ']' '(' i32seq ')' | 'uint16' '[' int32 ']' '(' i16seq ')' | 'uint8' '[' int32 ']' '(' i8seq ')' | 'unsigned' 'int64' '[' int32 ']' '(' i64seq ')' | 'unsigned' 'int32' '[' int32 ']' '(' i32seq ')' | 'unsigned' 'int16' '[' int32 ']' '(' i16seq ')' | 'unsigned' 'int8' '[' int32 ']' '(' i8seq ')' | 'char' '[' int32 ']' '(' i16seq ')' | 'bool' '[' int32 ']' '(' boolSeq ')' | 'string' '[' int32 ']' '(' sqstringSeq ')' | 'type' '[' int32 ']' '(' classSeq ')' | 'object' '[' int32 ']' '(' objSeq ')' ; f32seq : /* EMPTY */ | f32seq float64 | f32seq int32 ; f64seq : /* EMPTY */ | f64seq float64 | f64seq int64 ; i64seq : /* EMPTY */ | i64seq int64 ; i32seq : /* EMPTY */ | i32seq int32 ; i16seq : /* EMPTY */ | i16seq int32 ; i8seq : /* EMPTY */ | i8seq int32 ; boolSeq : /* EMPTY */ | boolSeq truefalse ; sqstringSeq : /* EMPTY */ | sqstringSeq 'nullref' | sqstringSeq SQSTRING ; classSeq : /* EMPTY */ | classSeq 'nullref' | classSeq 'class' SQSTRING | classSeq className ; objSeq : /* EMPTY */ | objSeq serInit ; /* IL instructions and associated definitions */ methodSpec : 'method' ; instr_none : INSTR_NONE ; instr_var : INSTR_VAR ; instr_i : INSTR_I ; instr_i8 : INSTR_I8 ; instr_r : INSTR_R ; instr_brtarget : INSTR_BRTARGET ; instr_method : INSTR_METHOD ; instr_field : INSTR_FIELD ; instr_type : INSTR_TYPE ; instr_string : INSTR_STRING ; instr_sig : INSTR_SIG ; instr_tok : INSTR_TOK ; instr_switch : INSTR_SWITCH ; instr_r_head : instr_r '(' ; instr : instr_none | instr_var int32 | instr_var id | instr_i int32 | instr_i8 int64 | instr_r float64 | instr_r int64 | instr_r_head bytes ')' | instr_brtarget int32 | instr_brtarget id | instr_method methodRef | instr_field type typeSpec '::' dottedName | instr_field type dottedName | instr_field mdtoken | instr_field TYPEDEF_F | instr_field TYPEDEF_MR | instr_type typeSpec | instr_string compQstring | instr_string 'ansi' '(' compQstring ')' | instr_string bytearrayhead bytes ')' | instr_sig callConv type '(' sigArgs0 ')' | instr_tok ownerType /* ownerType ::= memberRef | typeSpec */ | instr_switch '(' labels ')' ; labels : /* empty */ | id ',' labels | int32 ',' labels | id | int32 ; /* Signatures */ tyArgs0 : /* EMPTY */ | '<' tyArgs1 '>' ; tyArgs1 : /* EMPTY */ | tyArgs2 ; tyArgs2 : type | tyArgs2 ',' type ; sigArgs0 : /* EMPTY */ | sigArgs1 ; sigArgs1 : sigArg | sigArgs1 ',' sigArg ; sigArg : '...' | paramAttr type marshalClause | paramAttr type marshalClause id ; /* Class referencing */ className : '[' dottedName ']' slashedName | '[' mdtoken ']' slashedName | '[' '*' ']' slashedName | '[' '.module' dottedName ']' slashedName | slashedName | mdtoken | TYPEDEF_T | '.this' | '.base' | '.nester' ; slashedName : dottedName | slashedName '/' dottedName ; typeSpec : className | '[' dottedName ']' | '[' '.module' dottedName ']' | type ; /* Native types for marshaling signatures */ nativeType : /* EMPTY */ | 'custom' '(' compQstring ',' compQstring ',' compQstring ',' compQstring ')' | 'custom' '(' compQstring ',' compQstring ')' | 'fixed' 'sysstring' '[' int32 ']' | 'fixed' 'array' '[' int32 ']' nativeType | 'variant' | 'currency' | 'syschar' | 'void' | 'bool' | 'int8' | 'int16' | 'int32' | 'int64' | 'float32' | 'float64' | 'error' | 'unsigned' 'int8' | 'unsigned' 'int16' | 'unsigned' 'int32' | 'unsigned' 'int64' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | nativeType '*' | nativeType '[' ']' | nativeType '[' int32 ']' | nativeType '[' int32 '+' int32 ']' | nativeType '[' '+' int32 ']' | 'decimal' | 'date' | 'bstr' | 'lpstr' | 'lpwstr' | 'lptstr' | 'objectref' | 'iunknown' iidParamIndex | 'idispatch' iidParamIndex | 'struct' | 'interface' iidParamIndex | 'safearray' variantType | 'safearray' variantType ',' compQstring | 'int' | 'unsigned' 'int' | 'uint' | 'nested' 'struct' | 'byvalstr' | 'ansi' 'bstr' | 'tbstr' | 'variant' 'bool' | 'method' | 'as' 'any' | 'lpstruct' | TYPEDEF_TS ; iidParamIndex : /* EMPTY */ | '(' 'iidparam' '=' int32 ')' ; variantType : /* EMPTY */ | 'null' | 'variant' | 'currency' | 'void' | 'bool' | 'int8' | 'int16' | 'int32' | 'int64' | 'float32' | 'float64' | 'unsigned' 'int8' | 'unsigned' 'int16' | 'unsigned' 'int32' | 'unsigned' 'int64' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | '*' | variantType '[' ']' | variantType 'vector' | variantType '&' | 'decimal' | 'date' | 'bstr' | 'lpstr' | 'lpwstr' | 'iunknown' | 'idispatch' | 'safearray' | 'int' | 'unsigned' 'int' | 'uint' | 'error' | 'hresult' | 'carray' | 'userdefined' | 'record' | 'filetime' | 'blob' | 'stream' | 'storage' | 'streamed_object' | 'stored_object' | 'blob_object' | 'cf' | 'clsid' ; /* Managed types for signatures */ type : 'class' className | 'object' | 'value' 'class' className | 'valuetype' className | type '[' ']' | type '[' bounds1 ']' /* uncomment when and if this type is supported by the Runtime | type 'value' '[' int32 ']' */ | type '&' | type '*' | type 'pinned' | type 'modreq' '(' typeSpec ')' | type 'modopt' '(' typeSpec ')' | methodSpec callConv type '*' '(' sigArgs0 ')' | type '<' tyArgs1 '>' | '!' '!' int32 | '!' int32 | '!' '!' dottedName | '!' dottedName | 'typedref' | 'void' | 'native' 'int' | 'native' 'unsigned' 'int' | 'native' 'uint' | 'native' 'float' | simpleType | '...' type ; simpleType : 'char' | 'string' | 'bool' | 'int8' | 'int16' | 'int32' | 'int64' | 'float32' | 'float64' | 'unsigned' 'int8' | 'unsigned' 'int16' | 'unsigned' 'int32' | 'unsigned' 'int64' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | TYPEDEF_TS ; bounds1 : bound | bounds1 ',' bound ; bound : /* EMPTY */ | '...' | int32 | int32 '...' int32 | int32 '...' ; /* Security declarations */ secDecl : '.permission' secAction typeSpec '(' nameValPairs ')' | '.permission' secAction typeSpec '=' '{' customBlobDescr '}' | '.permission' secAction typeSpec | psetHead bytes ')' | '.permissionset' secAction compQstring | '.permissionset' secAction '=' '{' secAttrSetBlob '}' ; secAttrSetBlob : /* EMPTY */ | secAttrBlob | secAttrBlob ',' secAttrSetBlob ; secAttrBlob : typeSpec '=' '{' customBlobNVPairs '}' | 'class' SQSTRING '=' '{' customBlobNVPairs '}' ; psetHead : '.permissionset' secAction '=' '(' | '.permissionset' secAction 'bytearray' '(' ; nameValPairs : nameValPair | nameValPair ',' nameValPairs ; nameValPair : compQstring '=' caValue ; truefalse : 'true' | 'false' ; caValue : truefalse | int32 | 'int32' '(' int32 ')' | compQstring | className '(' 'int8' ':' int32 ')' | className '(' 'int16' ':' int32 ')' | className '(' 'int32' ':' int32 ')' | className '(' int32 ')' ; secAction : 'request' | 'demand' | 'assert' | 'deny' | 'permitonly' | 'linkcheck' | 'inheritcheck' | 'reqmin' | 'reqopt' | 'reqrefuse' | 'prejitgrant' | 'prejitdeny' | 'noncasdemand' | 'noncaslinkdemand' | 'noncasinheritance' ; /* External source declarations */ esHead : '.line' | P_LINE ; extSourceSpec : esHead int32 SQSTRING | esHead int32 | esHead int32 ':' int32 SQSTRING | esHead int32 ':' int32 | esHead int32 ':' int32 ',' int32 SQSTRING | esHead int32 ':' int32 ',' int32 | esHead int32 ',' int32 ':' int32 SQSTRING | esHead int32 ',' int32 ':' int32 | esHead int32 ',' int32 ':' int32 ',' int32 SQSTRING | esHead int32 ',' int32 ':' int32 ',' int32 | esHead int32 QSTRING ; /* Manifest declarations */ fileDecl : '.file' fileAttr dottedName fileEntry hashHead bytes ')' fileEntry | '.file' fileAttr dottedName fileEntry ; fileAttr : /* EMPTY */ | fileAttr 'nometadata' ; fileEntry : /* EMPTY */ | '.entrypoint' ; hashHead : '.hash' '=' '(' ; assemblyHead : '.assembly' asmAttr dottedName ; asmAttr : /* EMPTY */ | asmAttr 'retargetable' | asmAttr 'legacy' 'library' | asmAttr 'cil' | asmAttr 'x86' | asmAttr 'ia64' | asmAttr 'amd64' ; assemblyDecls : /* EMPTY */ | assemblyDecls assemblyDecl ; assemblyDecl : '.hash' 'algorithm' int32 | secDecl | asmOrRefDecl ; intOrWildcard : int32 | '*' ; asmOrRefDecl : publicKeyHead bytes ')' | '.ver' intOrWildcard ':' intOrWildcard ':' intOrWildcard ':' intOrWildcard | '.locale' compQstring | localeHead bytes ')' | customAttrDecl | compControl ; publicKeyHead : '.publickey' '=' '(' ; publicKeyTokenHead : '.publickeytoken' '=' '(' ; localeHead : '.locale' '=' '(' ; assemblyRefHead : '.assembly' 'extern' asmAttr dottedName | '.assembly' 'extern' asmAttr dottedName 'as' dottedName ; assemblyRefDecls : /* EMPTY */ | assemblyRefDecls assemblyRefDecl ; assemblyRefDecl : hashHead bytes ')' | asmOrRefDecl | publicKeyTokenHead bytes ')' | 'auto' ; exptypeHead : '.class' 'extern' exptAttr dottedName ; exportHead : '.export' exptAttr dottedName /* deprecated */ ; exptAttr : /* EMPTY */ | exptAttr 'private' | exptAttr 'public' | exptAttr 'forwarder' | exptAttr 'nested' 'public' | exptAttr 'nested' 'private' | exptAttr 'nested' 'family' | exptAttr 'nested' 'assembly' | exptAttr 'nested' 'famandassem' | exptAttr 'nested' 'famorassem' ; exptypeDecls : /* EMPTY */ | exptypeDecls exptypeDecl ; exptypeDecl : '.file' dottedName | '.class' 'extern' slashedName | '.assembly' 'extern' dottedName | 'mdtoken' '(' int32 ')' | '.class' int32 | customAttrDecl | compControl ; manifestResHead : '.mresource' manresAttr dottedName | '.mresource' manresAttr dottedName 'as' dottedName ; manresAttr : /* EMPTY */ | manresAttr 'public' | manresAttr 'private' ; manifestResDecls : /* EMPTY */ | manifestResDecls manifestResDecl ; manifestResDecl : '.file' dottedName 'at' int32 | '.assembly' 'extern' dottedName | customAttrDecl | compControl ;