diff options
author | Adrian Thurston <thurston@complang.org> | 2015-10-08 18:15:39 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-10-08 18:15:39 -0400 |
commit | a16df3c2ed1163691eb1af042a1797d1a4895441 (patch) | |
tree | 6eee0759cb4ca03798af5e757a249965b156bef0 /src/loadcolm.cc | |
parent | ccaa108e29f630cea0033d6719f524625d1768b0 (diff) | |
download | colm-a16df3c2ed1163691eb1af042a1797d1a4895441.tar.gz |
reduction actions: add loc reference, elim duplicate labels
Diffstat (limited to 'src/loadcolm.cc')
-rw-r--r-- | src/loadcolm.cc | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/loadcolm.cc b/src/loadcolm.cc index 7dd21141..4829d519 100644 --- a/src/loadcolm.cc +++ b/src/loadcolm.cc @@ -2353,12 +2353,31 @@ struct LoadColm rti->type = ReduceTextItem::LhsRef; list.append( rti ); } - else if ( item.RED_RHS() != 0 ) { + else if ( item.RED_RHS_REF() != 0 ) { ReduceTextItem *rti = new ReduceTextItem; rti->type = ReduceTextItem::RhsRef; - rti->txt = item.RED_RHS().text().c_str(); + rti->txt = item.RED_RHS_REF().text().c_str(); list.append( rti ); } + else if ( item.RED_RHS_LOC() != 0 ) { + ReduceTextItem *rti = new ReduceTextItem; + rti->type = ReduceTextItem::RhsLoc; + rti->txt = item.RED_RHS_LOC().text().c_str(); + list.append( rti ); + } + else if ( item.RED_OPEN() != 0 ) { + ReduceTextItem *open = new ReduceTextItem; + open->type = ReduceTextItem::Txt; + open->txt = "{"; + list.append( open ); + + walkRedItemList( item.HostItems(), list ); + + ReduceTextItem *close = new ReduceTextItem; + close->type = ReduceTextItem::Txt; + close->txt = "}"; + list.append( close ); + } else { if ( list.length() > 0 && list.tail->type == ReduceTextItem::Txt ) { std::string txt = item.text(); |