JD2022-TU1/main/extern/Camcam/PlatformSDK/Include/asmparse.grammar

893 lines
32 KiB
Text

Lexical tokens
ID - C style alphaNumeric identifier (e.g. Hello_There2)
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).
----------------------------------------------------------------------------------
START : decls
;
decls : /* EMPTY */
| decls decl
;
decl : classHead '{' classDecls '}'
| nameSpaceHead '{' decls '}'
| methodHead methodDecls '}'
| fieldDecl
| dataDecl
| vtableDecl
| vtfixupDecl
| extSourceSpec
| fileDecl
| assemblyHead '{' assemblyDecls '}'
| assemblyRefHead '{' assemblyRefDecls '}'
| comtypeHead '{' comtypeDecls '}'
| manifestResHead '{' manifestResDecls '}'
| moduleHead
| secDecl
| customAttrDecl
| '.subsystem' int32
| '.corflags' int32
| '.file' 'alignment' int32
| '.imagebase' int64
| languageDecl
;
compQstring : QSTRING
| compQstring '+' QSTRING
;
languageDecl : '.language' SQSTRING
| '.language' SQSTRING ',' SQSTRING
| '.language' SQSTRING ',' SQSTRING ',' SQSTRING
;
customAttrDecl : '.custom' customType
| '.custom' customType '=' compQstring
| customHead bytes ')'
| '.custom' '(' ownerType ')' customType
| '.custom' '(' ownerType ')' customType '=' compQstring
| customHeadWithOwner bytes ')'
;
moduleHead : '.module'
| '.module' name1
| '.module' 'extern' name1
;
vtfixupDecl : '.vtfixup' '[' int32 ']' vtfixupAttr 'at' id
;
vtfixupAttr : /* EMPTY */
| vtfixupAttr 'int32'
| vtfixupAttr 'int64'
| vtfixupAttr 'fromunmanaged'
| vtfixupAttr 'retainappdomain'
| vtfixupAttr 'callmostderived'
;
vtableDecl : vtableHead bytes ')'
;
vtableHead : '.vtable' '=' '('
;
nameSpaceHead : '.namespace' name1
;
classHead : '.class' classAttr id 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'
;
extendsClause : /* EMPTY */
| 'extends' className
;
implClause : /* EMPTY */
| 'implements' classNames
;
classNames : classNames ',' className
| className
;
classDecls : /* EMPTY */
| classDecls classDecl
;
classDecl : methodHead methodDecls '}'
| classHead '{' classDecls '}'
| eventHead '{' eventDecls '}'
| propHead '{' propDecls '}'
| fieldDecl
| dataDecl
| secDecl
| extSourceSpec
| customAttrDecl
| '.size' int32
| '.pack' int32
| exportHead '{' comtypeDecls '}'
| '.override' typeSpec '::' methodName 'with' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| languageDecl
;
fieldDecl : '.field' repeatOpt fieldAttr type id atOpt initOpt
;
atOpt : /* EMPTY */
| 'at' id
;
initOpt : /* EMPTY */
| '=' fieldInit
;
repeatOpt : /* EMPTY */
| '[' int32 ']'
;
customHead : '.custom' customType '=' '('
;
customHeadWithOwner : '.custom' '(' ownerType ')' customType '=' '('
;
memberRef : methodSpec callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| methodSpec callConv type methodName '(' sigArgs0 ')'
| 'field' type typeSpec '::' id
| 'field' type id
;
customType : callConv type typeSpec '::' '.ctor' '(' sigArgs0 ')'
| callConv type '.ctor' '(' sigArgs0 ')'
;
ownerType : typeSpec
| memberRef
;
eventHead : '.event' eventAttr typeSpec id
| '.event' eventAttr id
;
eventAttr : /* EMPTY */
| eventAttr 'rtspecialname' /**/
| eventAttr 'specialname'
;
eventDecls : /* EMPTY */
| eventDecls eventDecl
;
eventDecl : '.addon' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.addon' callConv type methodName '(' sigArgs0 ')'
| '.removeon' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.removeon' callConv type methodName '(' sigArgs0 ')'
| '.fire' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.fire' callConv type methodName '(' sigArgs0 ')'
| '.other' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.other' callConv type methodName '(' sigArgs0 ')'
| extSourceSpec
| customAttrDecl
| languageDecl
;
propHead : '.property' propAttr callConv type name1 '(' sigArgs0 ')' initOpt
;
propAttr : /* EMPTY */
| propAttr 'rtspecialname' /**/
| propAttr 'specialname'
;
propDecls : /* EMPTY */
| propDecls propDecl
;
propDecl : '.set' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.set' callConv type methodName '(' sigArgs0 ')'
| '.get' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.get' callConv type methodName '(' sigArgs0 ')'
| '.other' callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| '.other' callConv type methodName '(' sigArgs0 ')'
| customAttrDecl
| extSourceSpec
| languageDecl
;
methodHeadPart1 : '.method'
;
methodHead : methodHeadPart1 methAttr callConv paramAttr type methodName '(' sigArgs0 ')' implAttr '{'
| methodHeadPart1 methAttr callConv paramAttr type 'marshal' '(' nativeType ')' methodName '(' sigArgs0 ')' implAttr '{'
;
methAttr : /* EMPTY */
| methAttr 'static'
| methAttr 'public'
| methAttr 'private'
| methAttr 'family'
| methAttr 'final'
| methAttr 'specialname'
| methAttr 'virtual'
| methAttr 'abstract'
| methAttr 'assembly'
| methAttr 'famandassem'
| methAttr 'famorassem'
| methAttr 'privatescope'
| methAttr 'hidebysig'
| methAttr 'newslot'
| methAttr 'strict'
| methAttr 'rtspecialname' /**/
| methAttr 'unmanagedexp'
| methAttr 'reqsecobj'
| 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'
;
methodName : '.ctor'
| '.cctor'
| name1
;
paramAttr : /* EMPTY */
| paramAttr '[' 'in' ']'
| paramAttr '[' 'out' ']'
| paramAttr '[' 'opt' ']'
| paramAttr '[' int32 ']'
;
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'
;
implAttr : /* EMPTY */
| implAttr 'native'
| implAttr 'cil'
| implAttr 'optil'
| implAttr 'managed'
| implAttr 'unmanaged'
| implAttr 'forwardref'
| implAttr 'preservesig'
| implAttr 'runtime'
| implAttr 'internalcall'
| implAttr 'synchronized'
| implAttr 'noinlining'
;
localsHead : '.locals'
;
methodDecl : '.emitbyte' int32
| sehBlock
| '.maxstack' int32
| localsHead '(' sigArgs0 ')'
| localsHead 'init' '(' sigArgs0 ')'
| '.entrypoint'
| '.zeroinit'
| dataDecl
| instr
| id ':'
| secDecl
| extSourceSpec
| languageDecl
| customAttrDecl
| '.export' '[' int32 ']'
| '.export' '[' int32 ']' 'as' id
| '.vtentry' int32 ':' int32
| '.override' typeSpec '::' methodName
| scopeBlock
| '.param' '[' int32 ']' initOpt
;
scopeBlock : scopeOpen methodDecls '}'
;
scopeOpen : '{'
;
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' className
;
finallyClause : 'finally'
;
faultClause : 'fault'
;
handlerBlock : scopeBlock
| 'handler' id 'to' id
| 'handler' int32 'to' int32
;
methodDecls : /* EMPTY */
| methodDecls methodDecl
;
dataDecl : ddHead ddBody
;
ddHead : '.data' tls id '='
| '.data' tls
;
tls : /* EMPTY */
| 'tls'
;
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
;
fieldInit : 'float32' '(' float64 ')'
| 'float64' '(' float64 ')'
| 'float32' '(' int64 ')'
| 'float64' '(' int64 ')'
| 'int64' '(' int64 ')'
| 'int32' '(' int64 ')'
| 'int16' '(' int64 ')'
| 'char' '(' int64 ')'
| 'int8' '(' int64 ')'
| 'bool' '(' truefalse ')'
| compQstring
| bytearrayhead bytes ')'
| 'nullref'
;
bytearrayhead : 'bytearray' '('
;
bytes : /* EMPTY */
| hexbytes
;
hexbytes : HEXBYTE
| hexbytes HEXBYTE
;
instr_r_head : INSTR_R '('
;
instr_tok_head : INSTR_TOK
;
methodSpec : 'method'
;
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 callConv type typeSpec '::' methodName '(' sigArgs0 ')'
| INSTR_METHOD callConv type methodName '(' sigArgs0 ')'
| INSTR_FIELD type typeSpec '::' id
| INSTR_FIELD type id
| INSTR_TYPE typeSpec
| INSTR_STRING compQstring
| INSTR_STRING bytearrayhead bytes ')'
| INSTR_SIG callConv type '(' sigArgs0 ')'
| INSTR_RVA id
| INSTR_RVA int32
| instr_tok_head ownerType /* ownerType ::= memberRef | typeSpec */
| INSTR_SWITCH '(' labels ')'
| INSTR_PHI int16s
;
sigArgs0 : /* EMPTY */
| sigArgs1
;
sigArgs1 : sigArg
| sigArgs1 ',' sigArg
;
sigArg : '...'
| paramAttr type
| paramAttr type id
| paramAttr type 'marshal' '(' nativeType ')'
| paramAttr type 'marshal' '(' nativeType ')' id
;
name1 : id
| DOTTEDNAME
| name1 '.' name1
;
className : '[' name1 ']' slashedName
| '[' '.module' name1 ']' slashedName
| slashedName
;
slashedName : name1
| slashedName '/' name1
;
typeSpec : className
| '[' name1 ']'
| '[' '.module' name1 ']'
| type
;
callConv : 'instance' callConv
| 'explicit' callConv
| callKind
;
callKind : /* EMPTY */
| 'default'
| 'vararg'
| 'unmanaged' 'cdecl'
| 'unmanaged' 'stdcall'
| 'unmanaged' 'thiscall'
| 'unmanaged' 'fastcall'
;
nativeType : /* EMPTY */
| 'custom' '(' compQstring ',' compQstring ',' compQstring ',' compQstring ')'
| 'custom' '(' compQstring ',' compQstring ')'
| 'fixed' 'sysstring' '[' int32 ']'
| 'fixed' 'array' '[' int32 ']'
| 'variant'
| 'currency'
| 'syschar'
| 'void'
| 'bool'
| 'int8'
| 'int16'
| 'int32'
| 'int64'
| 'float32'
| 'float64'
| 'error'
| 'unsigned' 'int8'
| 'unsigned' 'int16'
| 'unsigned' 'int32'
| 'unsigned' 'int64'
| nativeType '*'
| nativeType '[' ']'
| nativeType '[' int32 ']'
| nativeType '[' int32 '+' int32 ']'
| nativeType '[' '+' int32 ']'
| 'decimal'
| 'date'
| 'bstr'
| 'lpstr'
| 'lpwstr'
| 'lptstr'
| 'objectref'
| 'iunknown'
| 'idispatch'
| 'struct'
| 'interface'
| 'safearray' variantType
| 'safearray' variantType ',' compQstring
| 'int'
| 'unsigned' 'int'
| 'nested' 'struct'
| 'byvalstr'
| 'ansi' 'bstr'
| 'tbstr'
| 'variant' 'bool'
| methodSpec
| 'as' 'any'
| 'lpstruct'
;
variantType : /* EMPTY */
| 'null'
| 'variant'
| 'currency'
| 'void'
| 'bool'
| 'int8'
| 'int16'
| 'int32'
| 'int64'
| 'float32'
| 'float64'
| 'unsigned' 'int8'
| 'unsigned' 'int16'
| 'unsigned' 'int32'
| 'unsigned' 'int64'
| '*'
| variantType '[' ']'
| variantType 'vector'
| variantType '&'
| 'decimal'
| 'date'
| 'bstr'
| 'lpstr'
| 'lpwstr'
| 'iunknown'
| 'idispatch'
| 'safearray'
| 'int'
| 'unsigned' 'int'
| 'error'
| 'hresult'
| 'carray'
| 'userdefined'
| 'record'
| 'filetime'
| 'blob'
| 'stream'
| 'storage'
| 'streamed_object'
| 'stored_object'
| 'blob_object'
| 'cf'
| 'clsid'
;
type : 'class' className
| 'object'
| 'string'
| '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' '(' className ')'
| type 'modopt' '(' className ')'
| '!' int32
| methodSpec callConv type '*' '(' sigArgs0 ')'
| 'typedref'
| 'char'
| 'void'
| 'bool'
| 'int8'
| 'int16'
| 'int32'
| 'int64'
| 'float32'
| 'float64'
| 'unsigned' 'int8'
| 'unsigned' 'int16'
| 'unsigned' 'int32'
| 'unsigned' 'int64'
| 'native' 'int'
| 'native' 'unsigned' 'int'
| 'native' 'float'
;
bounds1 : bound
| bounds1 ',' bound
;
bound : /* EMPTY */
| '...'
| int32
| int32 '...' int32
| int32 '...'
;
labels : /* empty */
| id ',' labels
| int32 ',' labels
| id
| int32
;
id : ID
| SQSTRING
;
int16s : /* EMPTY */
| int16s int32
;
int32 : INT64
;
int64 : INT64
;
float64 : FLOAT64
| 'float32' '(' int32 ')'
| 'float64' '(' int64 ')'
;
secDecl : '.permission' secAction typeSpec '(' nameValPairs ')'
| '.permission' secAction typeSpec
| psetHead bytes ')'
;
psetHead : '.permissionset' secAction '=' '('
;
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'
;
extSourceSpec : '.line' int32 SQSTRING
| '.line' int32
| '.line' int32 ':' int32 SQSTRING
| '.line' int32 ':' int32
| P_LINE int32 QSTRING
;
fileDecl : '.file' fileAttr name1 fileEntry hashHead bytes ')' fileEntry
| '.file' fileAttr name1 fileEntry
;
fileAttr : /* EMPTY */
| fileAttr 'nometadata'
;
fileEntry : /* EMPTY */
| '.entrypoint'
;
hashHead : '.hash' '=' '('
;
assemblyHead : '.assembly' asmAttr name1
;
asmAttr : /* EMPTY */
| asmAttr 'noappdomain'
| asmAttr 'noprocess'
| asmAttr 'nomachine'
| asmAttr 'retargetable'
;
assemblyDecls : /* EMPTY */
| assemblyDecls assemblyDecl
;
assemblyDecl : '.hash' 'algorithm' int32
| secDecl
| asmOrRefDecl
;
asmOrRefDecl : publicKeyHead bytes ')'
| '.ver' int32 ':' int32 ':' int32 ':' int32
| '.locale' compQstring
| localeHead bytes ')'
| customAttrDecl
;
publicKeyHead : '.publickey' '=' '('
;
publicKeyTokenHead : '.publickeytoken' '=' '('
;
localeHead : '.locale' '=' '('
;
assemblyRefHead : '.assembly' 'extern' asmAttr name1
| '.assembly' 'extern' asmAttr name1 'as' name1
;
assemblyRefDecls : /* EMPTY */
| assemblyRefDecls assemblyRefDecl
;
assemblyRefDecl : hashHead bytes ')'
| asmOrRefDecl
| publicKeyTokenHead bytes ')'
;
comtypeHead : '.class' 'extern' comtAttr name1
;
exportHead : '.export' comtAttr name1
;
comtAttr : /* EMPTY */
| comtAttr 'private'
| comtAttr 'public'
| comtAttr 'nested' 'public'
| comtAttr 'nested' 'private'
| comtAttr 'nested' 'family'
| comtAttr 'nested' 'assembly'
| comtAttr 'nested' 'famandassem'
| comtAttr 'nested' 'famorassem'
;
comtypeDecls : /* EMPTY */
| comtypeDecls comtypeDecl
;
comtypeDecl : '.file' name1
| '.class' 'extern' name1
| '.class' int32
| customAttrDecl
;
manifestResHead : '.mresource' manresAttr name1
;
manresAttr : /* EMPTY */
| manresAttr 'public'
| manresAttr 'private'
;
manifestResDecls : /* EMPTY */
| manifestResDecls manifestResDecl
;
manifestResDecl : '.file' name1 'at' int32
| '.assembly' 'extern' name1
| customAttrDecl
;