summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-05-28 20:29:24 -0400
committerAdrian Thurston <thurston@complang.org>2012-05-28 20:29:24 -0400
commit21fd4c27a9fab0bbd8e71611bae587719b7b1a31 (patch)
tree4a697de1ad40aa59746c26d010ecf8943c8ddd52
parent8355e537e797b60608a00a323dd85e2d67ebba13 (diff)
downloadcolm-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.kl48
-rw-r--r--colm/parsetree.cc47
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()
{