summaryrefslogtreecommitdiff
path: root/colm/fsmrun.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'colm/fsmrun.cpp')
-rw-r--r--colm/fsmrun.cpp37
1 files changed, 13 insertions, 24 deletions
diff --git a/colm/fsmrun.cpp b/colm/fsmrun.cpp
index 8c6b3aed..abd77b51 100644
--- a/colm/fsmrun.cpp
+++ b/colm/fsmrun.cpp
@@ -189,9 +189,7 @@ void FsmRun::sendBackText( const char *data, long length )
void FsmRun::queueBack( Kid *input )
{
- Alg *alg = input->tree->alg;
-
- if ( alg->flags & AF_GROUP_MEM ) {
+ if ( input->tree->flags & AF_GROUP_MEM ) {
#ifdef COLM_LOG_PARSE
LangElInfo *lelInfo = parser->tables->rtd->lelInfo;
cerr << "queuing back: " << lelInfo[input->tree->id].name << endl;
@@ -245,21 +243,19 @@ void FsmRun::sendBackIgnore( Kid *ignore )
#endif
Head *head = ignore->tree->tokdata;
- bool artificial = ignore->tree->alg != 0 &&
- ignore->tree->alg->flags & AF_ARTIFICIAL;
+ bool artificial = ignore->tree->flags & AF_ARTIFICIAL;
if ( head != 0 && !artificial )
sendBackText( string_data( head ), head->length );
/* Check for reverse code. */
- Alg *alg = ignore->tree->alg;
- if ( alg != 0 && alg->flags & AF_HAS_RCODE ) {
+ if ( ignore->tree->flags & AF_HAS_RCODE ) {
Execution execution( prg, parser->reverseCode,
parser, 0, 0, 0 );
/* Do the reverse exeuction. */
execution.rexecute( parser->root, parser->allReverseCode );
- alg->flags &= ~AF_HAS_RCODE;
+ ignore->tree->flags &= ~AF_HAS_RCODE;
}
ignore = ignore->next;
@@ -271,13 +267,12 @@ void FsmRun::sendBack( Kid *input )
#ifdef COLM_LOG_PARSE
LangElInfo *lelInfo = parser->tables->rtd->lelInfo;
cerr << "sending back: " << lelInfo[input->tree->id].name;
- if ( input->tree->alg->flags & AF_ARTIFICIAL )
+ if ( input->tree->flags & AF_ARTIFICIAL )
cerr << " (artificial)";
cerr << endl;
#endif
- Alg *alg = input->tree->alg;
- if ( alg->flags & AF_NAMED ) {
+ if ( input->tree->flags & AF_NAMED ) {
/* Send back anything that is in the buffer. */
inputStream->pushBack( p, pe-p );
p = pe = runBuf->buf;
@@ -287,20 +282,20 @@ void FsmRun::sendBack( Kid *input )
inputStream->pushBackNamed();
}
- if ( !(alg->flags & AF_ARTIFICIAL) ) {
+ if ( !(input->tree->flags & AF_ARTIFICIAL) ) {
/* Push back the token data. */
sendBackText( string_data( input->tree->tokdata ),
string_length( input->tree->tokdata ) );
}
/* Check for reverse code. */
- if ( alg->flags & AF_HAS_RCODE ) {
+ if ( input->tree->flags & AF_HAS_RCODE ) {
Execution execution( prg, parser->reverseCode,
parser, 0, 0, 0 );
/* Do the reverse exeuction. */
execution.rexecute( parser->root, parser->allReverseCode );
- alg->flags &= ~AF_HAS_RCODE;
+ input->tree->flags &= ~AF_HAS_RCODE;
}
/* Always push back the ignore text. */
@@ -355,7 +350,7 @@ void set_AF_GROUP_MEM( PdaRun *parser )
/* Only bother with non-ignore tokens. */
if ( !lelInfo[queued->tree->id].ignore ) {
if ( sendCount > 0 )
- queued->tree->alg->flags |= AF_GROUP_MEM;
+ queued->tree->flags |= AF_GROUP_MEM;
sendCount += 1;
}
queued = queued->next;
@@ -465,11 +460,8 @@ void execute_generation_action( Program *prg, PdaRun *parser, Code *code, Head *
* token. */
Tree *tree = parser->queue->tree;
bool hasrcode = make_reverse_code( parser->allReverseCode, parser->reverseCode );
- if ( hasrcode ) {
- if ( tree->alg == 0 )
- tree->alg = prg->algPool.allocate();
- tree->alg->flags |= AF_HAS_RCODE;
- }
+ if ( hasrcode )
+ tree->flags |= AF_HAS_RCODE;
/* Mark generated tokens as belonging to a group. */
set_AF_GROUP_MEM( parser );
@@ -510,10 +502,9 @@ Kid *FsmRun::makeToken( int id, Head *tokdata, bool namedLangEl, int bindId )
Kid *input = 0;
input = prg->kidPool.allocate();
input->tree = prg->treePool.allocate();
- input->tree->alg = prg->algPool.allocate();
if ( namedLangEl )
- input->tree->alg->flags |= AF_NAMED;
+ input->tree->flags |= AF_NAMED;
input->tree->refs = 1;
input->tree->id = id;
@@ -694,7 +685,6 @@ void FsmRun::sendEOF( )
Kid *input = prg->kidPool.allocate();
input->tree = prg->treePool.allocate();
- input->tree->alg = prg->algPool.allocate();
input->tree->refs = 1;
input->tree->id = parser->tables->rtd->eofId;
@@ -770,7 +760,6 @@ long PdaRun::undoParse( Tree *tree, CodeVect *rev )
assert( stackTop->next == 0 );
- prg->algPool.free( stackTop->tree->alg );
prg->treePool.free( stackTop->tree );
prg->kidPool.free( stackTop );
return 0;