summaryrefslogtreecommitdiff
path: root/colm
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2013-03-23 13:47:39 -0400
committerAdrian Thurston <thurston@complang.org>2013-03-23 13:47:39 -0400
commit52cd20f9b4d21204dc9f46a69bde7cf6e58d719e (patch)
tree89c123d264c8fb2b38d9258f060d481eefb36daa /colm
parent9922542d39edd209212541baeac8cfc7def13a83 (diff)
downloadcolm-52cd20f9b4d21204dc9f46a69bde7cf6e58d719e.tar.gz
added reducefirst
Diffstat (limited to 'colm')
-rw-r--r--colm/colm.lm10
-rw-r--r--colm/load.cc5
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 );
}