6 {{ util::FlattenArray($item[1]) }}
9 idl_interface: module_header interface
10 { [$item{module_header}, $item{interface}] }
13 module_header: '[' <commit> module_param(s? /,/) ']'
15 "TYPE" => "MODULEHEADER",
16 "PROPERTIES" => util::FlattenHash($item[3])
20 module_param: identifier '(' <commit> text ')'
21 {{ "$item{identifier}" => "$item{text}" }}
24 interface: 'interface' <commit> identifier '{' definition(s?) '}'
26 "TYPE" => "INTERFACE",
27 "NAME" => $item{identifier},
32 definition : typedef { $item[1] }
33 | function { $item[1] }
36 const : 'const' <commit> identifier identifier '=' anytext ';'
41 "VALUE" => $item{anytext}
45 typedef : 'typedef' <commit> type identifier array_len(?) ';'
48 "NAME" => $item{identifier},
49 "DATA" => $item{type},
50 "ARRAY_LEN" => $item[5][0]
54 enum: 'enum' <commit> '{' enum_element(s? /,/) '}'
57 "ELEMENTS" => $item[4]
61 enum_element: /[\w\s=]+/
63 struct: property_list(s?) 'struct' <commit> '{' element_list1(?) '}'
66 "PROPERTIES" => util::FlattenArray($item[1]),
67 "ELEMENTS" => util::FlattenArray2($item[5])
71 union: property_list(s?) 'union' <commit> '{' union_element(s?) '}'
74 "PROPERTIES" => util::FlattenArray($item[1]),
80 '[' 'case' '(' identifier ')' ']' base_element ';'
82 "TYPE" => "UNION_ELEMENT",
83 "CASE" => $item{identifier},
84 "DATA" => $item{base_element}
86 | '[' 'case' '(' identifier ')' ']' ';'
89 "CASE" => $item{identifier},
91 | '[' 'default' ']' base_element ';'
93 "TYPE" => "UNION_ELEMENT",
95 "DATA" => $item{base_element}
97 | '[' 'default' ']' ';'
103 base_element: property_list(s?) type pointer(s?) identifier array_len(?)
105 "NAME" => $item{identifier},
106 "TYPE" => $item{type},
107 "PROPERTIES" => util::FlattenArray($item[1]),
108 "POINTERS" => $#{$item[3]}==-1?undef:$#{$item[3]}+1,
109 "ARRAY_LEN" => $item[5][0]
118 | '[' <commit> anytext ']'
122 element_list1: base_element(s? /;/) ';'
125 element_list2: 'void'
126 | base_element(s? /,/)
131 property_list: '[' <commit> property(s /,/) ']'
143 | 'subcontext' '(' constant ')' {{ "$item[1]" => "$item{constant}" }}
144 | 'flag' '(' anytext ')' {{ "$item[1]" => "$item{anytext}" }}
145 | 'size_is' '(' expression ')' {{ "$item[1]" => "$item{expression}" }}
146 | 'length_is' '(' expression ')' {{ "$item[1]" => "$item{expression}" }}
147 | 'switch_is' '(' expression ')' {{ "$item[1]" => "$item{expression}" }}
148 | 'value' '(' anytext ')' {{ "$item[1]" => "$item{anytext}" }}
152 expression: /[\w.?\/+*-_]+/
154 function : property_list(s?) type identifier '(' <commit> element_list2 ');'
156 "TYPE" => "FUNCTION",
157 "NAME" => $item{identifier},
158 "RETURN_TYPE" => $item{type},
159 "PROPERTIES" => util::FlattenArray($item[1]),
160 "DATA" => $item{element_list2}
168 | identifier { $item[1] }
173 text2: /[\|\w\s,\*&\>"\/\..?-]*/
175 anytext: text2 '(' <commit> anytext ')' anytext
176 {{ "$item[1]($item[4])$item[6]" }}
178 {{ "$item[1]+$item[3]" }}