diff options
author | Adrian Thurston <thurston@complang.org> | 2013-03-23 13:31:20 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2013-03-23 13:31:20 -0400 |
commit | 69153ffd853c41064a85f7331e114501d7d4c434 (patch) | |
tree | e25ffc223f94f11d3e6a5fc24e800d5577eaa8f8 | |
parent | 64303886013e4b0b84db46c4a447b41c8dab0596 (diff) | |
download | colm-69153ffd853c41064a85f7331e114501d7d4c434.tar.gz |
tilde data in patterns
-rw-r--r-- | colm/load.cc | 27 | ||||
-rw-r--r-- | test/sprintf.exp | 1 | ||||
-rw-r--r-- | test/sprintf.lm | 3 | ||||
-rw-r--r-- | test/string.exp | 2 | ||||
-rw-r--r-- | test/string.in | 2 | ||||
-rw-r--r-- | test/string.lm | 7 |
6 files changed, 37 insertions, 5 deletions
diff --git a/colm/load.cc b/colm/load.cc index c36868e7..140d86b5 100644 --- a/colm/load.cc +++ b/colm/load.cc @@ -462,6 +462,20 @@ struct LoadSource if ( PatternEl.LitpatElList() != 0 ) { list = walkLitpatElList( PatternEl.LitpatElList(), PatternEl.Term().Nl() ); } + else if ( PatternEl.TildeData() != 0 ) { + String patternData = PatternEl.TildeData().text().c_str(); + PatternItem *patternItem = PatternItem::cons( internal, patternData, + PatternItem::InputText ); + PatternItemList *data = PatternItemList::cons( patternItem ); + + patternData = PatternEl.Nl().text().c_str(); + patternItem = PatternItem::cons( internal, patternData, + PatternItem::InputText ); + PatternItemList *term = PatternItemList::cons( patternItem ); + + list = patListConcat( data, term ); + + } else if ( PatternEl.OptLabel() != 0 ) { LangVarRef *varRef = walkOptLabel( PatternEl.OptLabel() ); PatternItemList *typeOrLitList = walkPatternElTypeOrLit( PatternEl.TypeOrLit() ); @@ -521,6 +535,19 @@ struct LoadSource if ( patternTopEl.LitpatElList() != 0 ) { list = walkLitpatElList( patternTopEl.LitpatElList(), patternTopEl.Term().Nl() ); } + else if ( patternTopEl.TildeData() != 0 ) { + String patternData = patternTopEl.TildeData().text().c_str(); + PatternItem *patternItem = PatternItem::cons( internal, patternData, + PatternItem::InputText ); + PatternItemList *data = PatternItemList::cons( patternItem ); + + patternData = patternTopEl.Nl().text().c_str(); + patternItem = PatternItem::cons( internal, patternData, + PatternItem::InputText ); + PatternItemList *term = PatternItemList::cons( patternItem ); + + list = patListConcat( data, term ); + } else if ( patternTopEl.PatternElList() != 0 ) { list = walkPatternElList( patternTopEl.PatternElList() ); } diff --git a/test/sprintf.exp b/test/sprintf.exp deleted file mode 100644 index 8def2489..00000000 --- a/test/sprintf.exp +++ /dev/null @@ -1 +0,0 @@ -000001b0 diff --git a/test/sprintf.lm b/test/sprintf.lm index 9af9817c..b2a65fa2 100644 --- a/test/sprintf.lm +++ b/test/sprintf.lm @@ -1 +1,4 @@ +##### LM ##### print( sprintf( "%08x\n" (256 + 11 * 16) ) ) +##### EXP ##### +000001b0 diff --git a/test/string.exp b/test/string.exp deleted file mode 100644 index 0962bae8..00000000 --- a/test/string.exp +++ /dev/null @@ -1,2 +0,0 @@ -yes -<start><expr_list><expr_list><expr_list></expr_list><expr><expr><term><primary><ident>a</ident></primary></term></expr><_literal_0009>+</_literal_0009><term><primary><string><_literal_000f>"</_literal_000f><_repeat_str_item><str_item><str_chr>%{{</str_chr></str_item></_repeat_str_item><_literal_000f>"</_literal_000f></string></primary></term></expr><_literal_000d>;</_literal_000d></expr_list><expr><term><term><primary><number>1</number></primary></term><_literal_000b>*</_literal_000b><primary><number>2</number></primary></term></expr><_literal_000d>;</_literal_000d></expr_list></start> diff --git a/test/string.in b/test/string.in deleted file mode 100644 index 8aef536f..00000000 --- a/test/string.in +++ /dev/null @@ -1,2 +0,0 @@ -a + "%{{"; 1 * 2; - diff --git a/test/string.lm b/test/string.lm index c16561fe..fa2b8173 100644 --- a/test/string.lm +++ b/test/string.lm @@ -1,3 +1,4 @@ +##### LM ##### lex token str_escape /'\\' any/ token str_chr /[^\\"]+/ @@ -51,3 +52,9 @@ def start parse S: start[stdin] print_xml( S.tree ) print( '\n' ) +##### IN ##### +a + "%{{"; 1 * 2; + +##### EXP ##### +yes +<start><expr_list><expr_list><expr_list></expr_list><expr><expr><term><primary><ident>a</ident></primary></term></expr><_literal_0009>+</_literal_0009><term><primary><string><_literal_000f>"</_literal_000f><_repeat_str_item><str_item><str_chr>%{{</str_chr></str_item></_repeat_str_item><_literal_000f>"</_literal_000f></string></primary></term></expr><_literal_000d>;</_literal_000d></expr_list><expr><term><term><primary><number>1</number></primary></term><_literal_000b>*</_literal_000b><primary><number>2</number></primary></term></expr><_literal_000d>;</_literal_000d></expr_list></start> |