diff options
author | David Gibson <dgibson@sneetch.(none)> | 2005-06-16 14:36:37 +1000 |
---|---|---|
committer | David Gibson <dgibson@sneetch.(none)> | 2005-06-16 14:36:37 +1000 |
commit | 4102d840d993e7cce7d5c5aea8ef696dc81236fc (patch) | |
tree | ab70f0a9e968780ed282f1bbd8d7ea1be3db5b6b /dtc-parser.y | |
parent | fc14dad7692d84d5f0f547fd0456b3f98526b6cc (diff) | |
download | dtc-4102d840d993e7cce7d5c5aea8ef696dc81236fc.zip dtc-4102d840d993e7cce7d5c5aea8ef696dc81236fc.tar.gz dtc-4102d840d993e7cce7d5c5aea8ef696dc81236fc.tar.bz2 |
Initial label support. Also switch to glr-parser mode and get rid of
hacks that were necessary without it.
Diffstat (limited to 'dtc-parser.y')
-rw-r--r-- | dtc-parser.y | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/dtc-parser.y b/dtc-parser.y index f177fb7..785acd1 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -47,6 +47,7 @@ extern struct node *device_tree; %token <byte> DT_BYTE %token <data> DT_STRING %token <str> DT_UNIT +%token <str> DT_LABEL %type <data> propdata %type <data> celllist @@ -57,12 +58,16 @@ extern struct node *device_tree; %type <node> nodedef %type <node> subnode %type <nodelist> subnodes +%type <str> label +%type <str> nodename + +%glr-parser %% devicetree: { assert(device_tree == NULL); - } '/' nodedef { device_tree = name_node($3, ""); } + } '/' nodedef { device_tree = name_node($3, "", NULL); } ; nodedef: '{' proplist subnodes '}' ';' { @@ -78,11 +83,11 @@ proplist: propdef proplist { } ; -propdef: DT_PROPNAME '=' propdata ';' { - $$ = build_property($1, $3); +propdef: label DT_PROPNAME '=' propdata ';' { + $$ = build_property($2, $4, $1); } - | DT_PROPNAME ';' { - $$ = build_empty_property($1); + | label DT_PROPNAME ';' { + $$ = build_empty_property($2, $1); } ; @@ -105,7 +110,15 @@ subnodes: subnode subnodes { | /* empty */ { $$ = NULL; } ; -subnode: DT_NODENAME nodedef { $$ = name_node($2, $1); } +subnode: label nodename nodedef { $$ = name_node($3, $2, $1); } + ; + +nodename: DT_NODENAME { $$ = $1; } + | DT_PROPNAME { $$ = $1; } + ; + +label: DT_LABEL { $$ = $1; } + | /* empty */ { $$ = NULL; } ; %% |