LeOS-Genesis/external/badvpn/bproto_generator/ProtoParser.lime

100 lines
1.6 KiB
Plaintext

%class ProtoParser
%start file
file =
directives messages {
$$ = array(
"directives" => $1,
"messages" => $2
);
}.
directives =
{
$$ = array();
} |
directive semicolon directives {
$$ = array_merge(array($1), $3);
}.
directive =
include string {
$$ = array(
"type" => "include",
"file" => $2
);
}.
messages =
msgspec {
$$ = array($1);
} |
msgspec messages {
$$ = array_merge(array($1), $2);
}.
msgspec =
message name spar entries epar semicolon {
$$ = array(
"name" => $2,
"entries" => $4
);
}.
entries =
entry {
$$ = array($1);
} |
entry entries {
$$ = array_merge(array($1), $2);
}.
entry =
cardinality type name equals number semicolon {
$$ = array(
"cardinality" => $1,
"type" => $2,
"name" => $3,
"id" => $5
);
}.
cardinality =
repeated {
$$ = "repeated";
} |
optional {
$$ = "optional";
} |
required {
$$ = "required";
} |
required repeated {
$$ = "required repeated";
}.
type =
uint {
$$ = array(
"type" => "uint",
"size" => $1
);
} |
data {
$$ = array(
"type" => "data"
);
} |
data srpar string erpar {
$$ = array(
"type" => "constdata",
"size" => $3
);
} |
message name {
$$ = array(
"type" => "message",
"message" => $2
);
}.