|
Grammar SystemRDLParser ANTLR-generated HTML file from SystemRDL.g
Terence Parr, MageLang Institute
|
Definition of parser SystemRDLParser, which is a subclass of LLkParser.
root
: ( component_def
| enum_def
| explicit_component_inst
| property_assign
| property_definition
)*
EOF
;
component_def
: ( "addrmap"
| "regfile"
| "reg"
| "field"
| "signal"
)
( id
|
)
LBRACE
( component_def
| explicit_component_inst
| property_assign
| enum_def
)*
RBRACE
( anonymous_component_inst_elems
|
)
SEMI
;
enum_def
: "enum" id enum_body SEMI
;
explicit_component_inst
: ( "external"
|
)
( "internal"
|
)
( "alias" id
|
)
id component_inst_elem ( COMMA component_inst_elem )* SEMI
;
property_assign
: default_property_assign SEMI
| explicit_property_assign SEMI
| post_property_assign SEMI
;
property_definition
: "property" id LBRACE property_body RBRACE SEMI
;
id
: ID
| INST_ID
;
property_body
: property_type
( property_usage
( property_default
|
)
| property_default property_usage
)
| property_usage
( property_type
( property_default
|
)
| property_default property_type
)
| property_default
( property_type property_usage
| property_usage property_type
)
;
property_type
: "type" EQ
( property_string_type
| property_number_type
| property_boolean_type
| property_ref_type
)
SEMI
;
property_usage
: "component" EQ property_component ( OR property_component )* SEMI
;
property_default
: ( "default" EQ
( str
| num
| "true"
| "false"
)
SEMI )
;
property_string_type
: "string"
;
property_number_type
: "number"
;
property_boolean_type
: "boolean"
;
property_ref_type
: ( "addrmap"
| "reg"
| "regfile"
| "field"
| "ref"
)
;
str
: STR
;
num
: NUM
;
property_component
: ( "signal"
| "addrmap"
| "reg"
| "regfile"
| "field"
| "all"
)
;
anonymous_component_inst_elems
: ( "external"
|
)
component_inst_elem ( COMMA component_inst_elem )*
;
component_inst_elem
: id
( array
|
)
( EQ num
|
)
( AT num
|
)
( INC num
|
)
( MOD num
|
)
;
array
: LSQ num
( COLON num
|
)
RSQ
;
instance_ref
: instance_ref_elem ( DOT instance_ref_elem )*
( DREF property
|
)
;
instance_ref_elem
: id
( LSQ num RSQ
|
)
;
property
: "name"
| "desc"
| "arbiter"
| "rset"
| "rclr"
| "woclr"
| "woset"
| "we"
| "wel"
| "swwe"
| "swwel"
| "hwset"
| "hwclr"
| "swmod"
| "swacc"
| "sticky"
| "stickybit"
| "intr"
| "anded"
| "ored"
| "xored"
| "counter"
| "overflow"
| "sharedextbus"
| "errextbus"
| "reset"
| "littleendian"
| "bigendian"
| "rsvdset"
| "rsvdsetX"
| "bridge"
| "shared"
| "msb0"
| "lsb0"
| "sync"
| "async"
| "cpuif_reset"
| "field_reset"
| "activehigh"
| "activelow"
| "singlepulse"
| "underflow"
| "incr"
| "decr"
| "incrwidth"
| "decrwidth"
| "incrvalue"
| "decrvalue"
| "saturate"
| "decrsaturate"
| "threshold"
| "decrthreshold"
| "dontcompare"
| "donttest"
| "internal"
| "alignment"
| "regwidth"
| "fieldwidth"
| "signalwidth"
| "accesswidth"
| "sw"
| "hw"
| "addressing"
| "precedence"
| "encode"
| "resetsignal"
| "clock"
| "mask"
| "enable"
| "hwenable"
| "hwmask"
| "haltmask"
| "haltenable"
| "halt"
| "next"
| PROPERTY
;
default_property_assign
: "default" explicit_property_assign
;
explicit_property_assign
: property_modifier property
| property ( EQ property_assign_rhs )
;
post_property_assign
: instance_ref ( EQ property_assign_rhs )
;
property_modifier
: "posedge"
| "negedge"
| "bothedge"
| "level"
| "nonsticky"
;
property_assign_rhs
: property_rvalue_constant
| "enum" enum_body
| instance_ref
| concat
;
property_rvalue_constant
: "true"
| "false"
| "rw"
| "wr"
| "r"
| "w"
| "na"
| "compact"
| "regalign"
| "fullalign"
| "hw"
| "sw"
| num
| str
;
enum_body
: LBRACE ( enum_entry )* RBRACE
;
concat
: LBRACE concat_elem ( COMMA concat_elem )* RBRACE
;
concat_elem
: instance_ref
| num
;
enum_entry
: id EQ num
( LBRACE ( enum_property_assign )* RBRACE
|
)
SEMI
;
enum_property_assign
: ( "name"
| "desc"
)
EQ str SEMI
;