diff options
author | Adrian Thurston <thurston@complang.org> | 2012-05-28 20:29:24 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2012-05-28 20:29:24 -0400 |
commit | 21fd4c27a9fab0bbd8e71611bae587719b7b1a31 (patch) | |
tree | 4a697de1ad40aa59746c26d010ecf8943c8ddd52 | |
parent | 8355e537e797b60608a00a323dd85e2d67ebba13 (diff) | |
download | colm-21fd4c27a9fab0bbd8e71611bae587719b7b1a31.tar.gz |
cleanup in token region code
Use the same name for the RegionDef and TokenRegion. Eventually should be able
to unify these two structs.
-rw-r--r-- | colm/lmparse.kl | 48 | ||||
-rw-r--r-- | colm/parsetree.cc | 47 |
2 files changed, 27 insertions, 68 deletions
diff --git a/colm/lmparse.kl b/colm/lmparse.kl index 09f1bff1..d6dfdce0 100644 --- a/colm/lmparse.kl +++ b/colm/lmparse.kl @@ -482,35 +482,35 @@ region_head: KW_Lex TK_Word final { /* Just for ignores. */ - TokenRegion *tokenRegionIgn = new TokenRegion( InputLoc(), $2->data + "_ign" , + String scannerNameIgn( $2->data.length() + 2, "<%s>-ign", $2->data.data ); + TokenRegion *tokenRegionIgn = new TokenRegion( InputLoc(), scannerNameIgn, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionIgn ); pd->regionList.append( tokenRegionIgn ); - String scannerNameIgn( $2->data.length() + 2, "<%s>-ign", $2->data.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, tokenRegionIgn ); /* Just for collect ignores. Will use the ignore-only start state. */ - TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), $2->data + "_ci" , + String scannerNameCi( $2->data.length() + 2, "<%s>-ci", $2->data.data ); + TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), scannerNameCi, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionCi ); pd->regionList.append( tokenRegionCi ); - String scannerNameCi( $2->data.length() + 2, "<%s>-ci", $2->data.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, tokenRegionCi ); /* Just for tokens. */ - TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), $2->data + "_tok" , + String scannerNameTok( $2->data.length() + 2, "<%s>-tok", $2->data.data ); + TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), scannerNameTok, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionTok ); pd->regionList.append( tokenRegionTok ); - String scannerNameTok( $2->data.length() + 2, "<%s>-tok", $2->data.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, tokenRegionTok ); /* Make the new token region. */ - TokenRegion *tokenRegion = new TokenRegion( InputLoc(), $2->data, + String scannerName( $2->data.length() + 2, "<%s>", $2->data.data ); + TokenRegion *tokenRegion = new TokenRegion( InputLoc(), scannerName, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegion ); pd->regionList.append( tokenRegion ); - String scannerName( $2->data.length() + 2, "<%s>", $2->data.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerName, tokenRegion ); regionStack.push( tokenRegion ); @@ -948,35 +948,35 @@ literal_item: opt_no_ignore TK_Literal opt_no_ignore bool insideRegion = regionStack.top() != pd->rootRegion; if ( !insideRegion ) { /* Just for ignores. */ - TokenRegion *tokenRegionIgn = new TokenRegion( InputLoc(), name + "_ign", + String scannerNameIgn( name.length() + 2, "<%s>-ign", name.data ); + TokenRegion *tokenRegionIgn = new TokenRegion( InputLoc(), scannerNameIgn, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionIgn ); pd->regionList.append( tokenRegionIgn ); - String scannerNameIgn( name.length() + 2, "<%s>-ign", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, tokenRegionIgn ); /* Just for collect ignores. Will use the ignore-only start state. */ - TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), name + "_ci", + String scannerNameCi( name.length() + 2, "<%s>-ci", name.data ); + TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), scannerNameCi, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionCi ); pd->regionList.append( tokenRegionCi ); - String scannerNameCi( name.length() + 2, "<%s>-ci", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, tokenRegionCi ); /* Just for tokens. */ - TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), name + "_tok", + String scannerNameTok( name.length() + 2, "<%s>-tok", name.data ); + TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), scannerNameTok, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionTok ); pd->regionList.append( tokenRegionTok ); - String scannerNameTok( name.length() + 2, "<%s>-tok", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, tokenRegionTok ); /* Make a new token region just for the token. */ - TokenRegion *tokenRegion = new TokenRegion( InputLoc(), $2->data, + String scannerName( name.length() + 2, "<%s>", name.data ); + TokenRegion *tokenRegion = new TokenRegion( InputLoc(), scannerName, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegion ); pd->regionList.append( tokenRegion ); - String scannerName( name.length() + 2, "<%s>", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerName, tokenRegion ); regionStack.push( tokenRegion ); @@ -1174,35 +1174,35 @@ token_def_name: if ( !pd->insideRegion ) { /* For just ignores. */ - TokenRegion *tokenRegionIgn = new TokenRegion( InputLoc(), name + "_ign", + String scannerNameIgn( name.length() + 2, "<%s>-ign", name.data ); + TokenRegion *tokenRegionIgn = new TokenRegion( InputLoc(), scannerNameIgn, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionIgn ); pd->regionList.append( tokenRegionIgn ); - String scannerNameIgn( name.length() + 2, "<%s>-ign", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, tokenRegionIgn ); /* Just for explicitly collecting ignores. */ - TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), name + "_ci", + String scannerNameCi( name.length() + 2, "<%s>-ci", name.data ); + TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), scannerNameCi, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionCi ); pd->regionList.append( tokenRegionCi ); - String scannerNameCi( name.length() + 2, "<%s>-ci", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, tokenRegionCi ); /* Just for tokens. */ - TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), name + "_tok", + String scannerNameTok( name.length() + 2, "<%s>-tok", name.data ); + TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), scannerNameTok, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegionTok ); pd->regionList.append( tokenRegionTok ); - String scannerNameTok( name.length() + 2, "<%s>-tok", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, tokenRegionTok ); /* If not inside a region, make one for the token. */ - TokenRegion *tokenRegion = new TokenRegion( InputLoc(), name, + String scannerName( name.length() + 2, "<%s>", name.data ); + TokenRegion *tokenRegion = new TokenRegion( InputLoc(), scannerName, pd->regionList.length(), regionStack.top() ); regionStack.top()->childRegions.append( tokenRegion ); pd->regionList.append( tokenRegion ); - String scannerName( name.length() + 2, "<%s>", name.data ); addRegionDef( InputLoc(), namespaceStack.top(), scannerName, tokenRegion ); regionStack.push( tokenRegion ); diff --git a/colm/parsetree.cc b/colm/parsetree.cc index 14e070a9..b8406565 100644 --- a/colm/parsetree.cc +++ b/colm/parsetree.cc @@ -266,6 +266,9 @@ void RegionDef::makeNameTree( const InputLoc &loc, Compiler *pd ) /* Recurse. */ tokenRegion->makeNameTree( pd ); + /* Guess we do this now. */ + tokenRegion->makeActions( pd ); + /* The name scope ends, pop the name instantiation. */ pd->curNameInst = prevNameInst; } @@ -357,18 +360,6 @@ void TokenRegion::makeActions( Compiler *pd ) lmActSelect = newAction( pd, loc, "lagsel", il6 ); } -void TokenRegion::findName( Compiler *pd ) -{ - NameInst *nameInst = pd->curNameInst; - while ( nameInst->name == 0 ) { - nameInst = nameInst->parent; - /* Since every machine must must have a name, we should always find a - * name for the longest match. */ - assert( nameInst != 0 ); - } - name = nameInst->name; -} - void TokenRegion::makeNameTree( Compiler *pd ) { /* Create an anonymous scope for the longest match. Will be used for @@ -390,12 +381,6 @@ void TokenRegion::makeNameTree( Compiler *pd ) td->join->makeNameTree( pd ); } - /* Traverse the name tree upwards to find a name for this lm. */ - findName( pd ); - - /* Also make the longest match's actions at this point. */ - makeActions( pd ); - /* The name scope ends, pop the name instantiation. */ pd->curNameInst = prevNameInst; } @@ -647,30 +632,6 @@ FsmGraph *TokenRegion::walk( Compiler *pd ) return retFsm; } -FsmGraph *JoinOrLm::walk( Compiler *pd ) -{ - FsmGraph *rtnVal = 0; - rtnVal = join->walk( pd ); - return rtnVal; -} - -void JoinOrLm::makeNameTree( Compiler *pd ) -{ - join->makeNameTree( pd ); -} - -FsmGraph *RegionJoinOrLm::walk( Compiler *pd ) -{ - FsmGraph *rtnVal = 0; - rtnVal = tokenRegion->walk( pd ); - return rtnVal; -} - -void RegionJoinOrLm::makeNameTree( Compiler *pd ) -{ - tokenRegion->makeNameTree( pd ); -} - /* Construct with a location and the first expression. */ Join::Join( Expression *expr ) : @@ -1235,8 +1196,6 @@ void FactorWithAug::makeNameTree( Compiler *pd ) pd->curNameInst = prevNameInst; } - - /* Clean up after a factor with repetition node. */ FactorWithRep::~FactorWithRep() { |