diff options
author | Adrian Thurston <thurston@complang.org> | 2013-03-23 13:47:39 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2013-03-23 13:47:39 -0400 |
commit | 52cd20f9b4d21204dc9f46a69bde7cf6e58d719e (patch) | |
tree | 89c123d264c8fb2b38d9258f060d481eefb36daa /colm | |
parent | 9922542d39edd209212541baeac8cfc7def13a83 (diff) | |
download | colm-52cd20f9b4d21204dc9f46a69bde7cf6e58d719e.tar.gz |
added reducefirst
Diffstat (limited to 'colm')
-rw-r--r-- | colm/colm.lm | 10 | ||||
-rw-r--r-- | colm/load.cc | 5 |
2 files changed, 13 insertions, 2 deletions
diff --git a/colm/colm.lm b/colm/colm.lm index 6369f1bf..1bebaeac 100644 --- a/colm/colm.lm +++ b/colm/colm.lm @@ -34,6 +34,7 @@ lex token RETURN / 'return' / token BREAK / 'break' / token REJECT / 'reject' / + token REDUCEFIRST / 'reducefirst' / token MAKE_TOKEN / 'make_token' / token MAKE_TREE / 'make_tree' / @@ -241,8 +242,15 @@ def namespace_def def obj_var_list [] +def opt_reduce_first + [ReduceFirst: REDUCEFIRST] +| [] + def cfl_def - [DEF DefId: id VarDefList: var_def* ProdList: prod_list] + [DEF DefId: id + VarDefList: var_def* + OptReduceFirst: opt_reduce_first + ProdList: prod_list] def region_def [LEX RootItemList: root_item* END] diff --git a/colm/load.cc b/colm/load.cc index 9b5b6847..fa0dd5fc 100644 --- a/colm/load.cc +++ b/colm/load.cc @@ -888,7 +888,10 @@ void LoadSource::walkCflDef( cfl_def cflDef ) LelDefList *defList = new LelDefList; walkProdList( defList, cflDef.ProdList() ); - NtDef *ntDef = NtDef::cons( name, namespaceStack.top(), contextStack.top(), false ); + bool reduceFirst = cflDef.OptReduceFirst().ReduceFirst() != 0; + + NtDef *ntDef = NtDef::cons( name, namespaceStack.top(), + contextStack.top(), reduceFirst ); BaseParser::cflDef( ntDef, objectDef, defList ); } |