Flylib.com

Books Software

 
 
 

Appendix A - IL Assembler Grammar Reference

Appendix A

IL Assembler Grammar Reference

Lexical Tokens

  • ID   C-style alphanumeric identifier (e.g., Hello_There2)

  • DOTTEDNAME   Composite dot-separated name (e.g., System. Object )

  • QSTRING   C-style quoted string (e.g., "hi\n")

  • SQSTRING   C-style single-quoted string (e.g., 'hi')

  • 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)

  • HEXBYTE   Two-digit unsigned hexadecimal number (e.g., 0A, F4)

  • INSTR_*   IL instructions of a particular kind

Data Type Nonterminals


<compQstring>

::= QSTRING ”‚

<compQstring>

+ QSTRING

<int32>

::= INT64

<int64>

::= INT64

<float64>

::= FLOAT64 ”‚

float32

(

<int32>

) ”‚

float64

(

<int64>

)

<bytes>

::= /* EMPTY */ ”‚

<hexbytes> <hexbytes>

::= HEXBYTE ”‚

<hexbytes>

HEXBYTE

<truefalse>

::=

true

”‚

false

Identifier Nonterminals


<id>

::= ID ”‚ SQSTRING

<compName>

::=

<id>

”‚ DOTTEDNAME ”‚

<compName>

.

<compName>

Module-Level Declarations


<PROGRAM>

::=

<decls>

<decls> ::= /* EMPTY */ ”‚

<decls> <decl> <decl>

::=

<classHead>

{

<classDecls>

} ”‚

<nameSpaceHead>

{

<decls>

} ”‚

<methodHead> <methodDecls>

} ”‚

<fieldDecl>

”‚

<dataDecl>

”‚

<vtfixupDecl>

”‚

<fileDecl>

”‚

<assemblyHead>

{

<assemblyDecls>

} ”‚

<assemblyRefHead>

{

<assemblyRefDecls>

} ”‚

<expTypeHead>

{

<expTypeDecls>

} ”‚

<manifestResHead>

{

<manifestResDecls>

} ”‚

<moduleHead>

”‚

<secDecl>

”‚

<customAttrDecl>

”‚

.subsystem


<int32>

”‚

.corflags


<int32>

”‚

.file alignment


<int32>

”‚

.imagebase


<int64>

”‚

<extSourceSpec>

”‚

<languageDecl>

External Source Declarations


<extSourceSpec>

::=

.line


<int32>

SQSTRING ”‚

.line


<int32>

”‚

.line


<int32>

:

<int32>

SQSTRING ”‚

.line


<int32>

:

<int32> <languageDecl>

::=

.language

SQSTRING ”‚

.language

SQSTRING,SQSTRING ”‚

.language

SQSTRING,SQSTRING,SQSTRING

V-Table Fixup Declaration


<vtfixupDecl>

::=

.vtfixup

[

<int32>

]

<vtfixupAttr>


at


<id> <vtfixupAttr>

::= /* EMPTY */ ”‚

<vtfixupAttr>


int32

”‚

<vtfixupAttr>


int64

”‚

<vtfixupAttr>


fromunmanaged

”‚

<vtfixupAttr>


callmostderived

Namespace and Type Declarations


<nameSpaceHead>

::=

.namespace


<compName> <classHead>

::=

.class


<classAttrs> <id> <extendsClause> <implClause> <classAttrs>

::= /* EMPTY */ ”‚

<classAttrs> <classAttr> <classAttr>

::=

<classAttr>


public

”‚

<classAttr>


private

”‚

<classAttr>


nested public

”‚

<classAttr>


nested private

”‚

<classAttr>


nested family

”‚

<classAttr>


nested assembly

”‚

<classAttr>


nested famandassem

”‚

<classAttr>


nested famorassem

”‚

<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>


beforefieldinit

”‚

<classAttr>


specialname

”‚

<classAttr>


rtspecialname


<extendsClause>

::= /* EMPTY */ ”‚

extends


<classRef> <implClause>

::= /* EMPTY */ ”‚

implements


<classRefs> <classRefs>

::=

<classRefs>

,

<classRef>

”‚

<classRef> <classRef>

::= [

<compName>

]

<slashedName>

”‚ [

.module


<compName>

]

<slashedName>

”‚

<slashedName> <slashedName>

::=

<compName>

”‚

<slashedName>

/

<compName> <classDecls>

::= /* EMPTY */ ”‚

<classDecls> <classDecl> <classDecl>

::=

<methodHead> <methodDecls>

} ”‚

<classHead>

{

<classDecls>

} ”‚

<eventHead>

{

<eventDecls>

} ”‚

<propHead>

{

<propDecls>

} ”‚

<fieldDecl>

”‚

<dataDecl>

”‚

<secDecl>

”‚

<extSourceSpec>

”‚

<customAttrDecl>

”‚

.

size



<int32>

”‚

.pack


<int32>

”‚

.override


<typeSpec>

::

<methodName>


with


<callConv> <type> <typeSpec>

::

<methodName>

(

<sigArgs>

) ”‚

<languageDecl>