diff options
Diffstat (limited to 'test/multiregion1.lm')
-rw-r--r-- | test/multiregion1.lm | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/test/multiregion1.lm b/test/multiregion1.lm new file mode 100644 index 0000000..5c8bdea --- /dev/null +++ b/test/multiregion1.lm @@ -0,0 +1,242 @@ +##### LM ##### + + +token newline / '\n' / +token index / 'Index:' [ \t]* / +token consume_line / [^\n]* / + + +def index_stmt [index consume_line newline] + +token separator_line / '='+ '\n' / + +# Whitespace separated word list +lex + token word /[^\t \n]+/ + ignore /[\t ]+/ + + def word_list + [word word_list] + | [] +end + +token old_file_start / '---' [\t ]+ / +token new_file_start / '+++' [\t ]+ / + +def old_file + [old_file_start word_list newline] + +def new_file + [new_file_start word_list newline] + +def file_header + [index_stmt separator_line old_file new_file] + +token hunk_header / '@@' any* :>> '@@' '\n' / +token hunk_line / ( ' ' | '-' | '+' ) [^\n]* '\n' / + +def hunk_body + [hunk_line*] + +def hunk + [hunk_header hunk_body] + +# diff of a single file: header followed by a hunk list. +def file_diff + [file_header hunk*] + +def start + [file_diff*] + +parse S: start[ stdin ] + +for OF: old_file in S { + # Get the first word and check if it is + # the file we are interested in. + if match OF [ + "--- fsmrun.cpp" + Rest: word_list + "\n" + ] + { + OF = construct old_file + ["--- newfilename.cpp " Rest "\n"] + } +} + +print( S ) + +##### IN ##### +Index: fsmrun.cpp +=================================================================== +--- fsmrun.cpp (revision 4555) ++++ fsmrun.cpp (working copy) +@@ -150,7 +150,7 @@ + peof = 0; + if ( parser != 0 ) { + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + else { + region = 0; +@@ -189,7 +189,7 @@ + + tokstart = 0; + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + + void FsmRun::sendToken( int id ) +@@ -222,7 +222,7 @@ + parser = newParser; + + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + else { + #ifdef LOG_ACTIONS +@@ -355,7 +355,7 @@ + + /* Set the current state from the next region. */ + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + } + +@@ -452,7 +452,7 @@ + /* First thing check for error. */ + if ( cs == tables->errorState ) { + if ( parser != 0 ) { +- if ( getStateFromNextRegion( 1 ) != 0 ) { ++ if ( parser->getNextRegion( 1 ) != 0 ) { + #ifdef LOG_BACKTRACK + cerr << "scanner failed, trying next region" << endl; + #endif +@@ -462,7 +462,7 @@ + + parser->nextRegionInd += 1; + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + cerr << "new token region: " << + parser->tables->gbl->regionInfo[region].name << endl; + continue; +@@ -495,7 +495,7 @@ + } + else { + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + cerr << "new token region: " << + parser->tables->gbl->regionInfo[region].name << endl; + continue; +Index: junk.cpp +=================================================================== +--- ++++ junk.cpp (working copy) +Index: fsmrun.h +=================================================================== +--- fsmrun.h (revision 4557) ++++ fsmrun.h (working copy) +@@ -197,10 +197,6 @@ + void runOnInputStream( PdaRun *parser, InputStream &in ); + void execute(); + +- /* Offset can be used to look at the next nextRegionInd. */ +- int getStateFromNextRegion( int offset = 0 ) +- { return tables->entryByRegion[parser->getNextRegion(offset)]; } +- + FsmTables *tables; + PdaRun *parser; + InputStream *inputStream; +##### EXP ##### +Index: fsmrun.cpp +=================================================================== +--- newfilename.cpp (revision 4555) ++++ fsmrun.cpp (working copy) +@@ -150,7 +150,7 @@ + peof = 0; + if ( parser != 0 ) { + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + else { + region = 0; +@@ -189,7 +189,7 @@ + + tokstart = 0; + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + + void FsmRun::sendToken( int id ) +@@ -222,7 +222,7 @@ + parser = newParser; + + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + else { + #ifdef LOG_ACTIONS +@@ -355,7 +355,7 @@ + + /* Set the current state from the next region. */ + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + } + } + +@@ -452,7 +452,7 @@ + /* First thing check for error. */ + if ( cs == tables->errorState ) { + if ( parser != 0 ) { +- if ( getStateFromNextRegion( 1 ) != 0 ) { ++ if ( parser->getNextRegion( 1 ) != 0 ) { + #ifdef LOG_BACKTRACK + cerr << "scanner failed, trying next region" << endl; + #endif +@@ -462,7 +462,7 @@ + + parser->nextRegionInd += 1; + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + cerr << "new token region: " << + parser->tables->gbl->regionInfo[region].name << endl; + continue; +@@ -495,7 +495,7 @@ + } + else { + region = parser->getNextRegion(); +- cs = getStateFromNextRegion(); ++ cs = tables->entryByRegion[region]; + cerr << "new token region: " << + parser->tables->gbl->regionInfo[region].name << endl; + continue; +Index: junk.cpp +=================================================================== +--- ++++ junk.cpp (working copy) +Index: fsmrun.h +=================================================================== +--- fsmrun.h (revision 4557) ++++ fsmrun.h (working copy) +@@ -197,10 +197,6 @@ + void runOnInputStream( PdaRun *parser, InputStream &in ); + void execute(); + +- /* Offset can be used to look at the next nextRegionInd. */ +- int getStateFromNextRegion( int offset = 0 ) +- { return tables->entryByRegion[parser->getNextRegion(offset)]; } +- + FsmTables *tables; + PdaRun *parser; + InputStream *inputStream; |