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 ;