summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-05-28 18:21:19 -0400
committerAdrian Thurston <thurston@complang.org>2012-05-28 18:21:19 -0400
commit6f5e276c1b14cf356c9c3183dad98b8df99febdf (patch)
tree632be9b178138fd3a29816b30d8f3e9cb502dc9a
parent24f39e9b43a591701cbaba4845fcc14edb585864 (diff)
downloadcolm-6f5e276c1b14cf356c9c3183dad98b8df99febdf.tar.gz
code cleanup
The JoinOrLm structs are no longer needed. VarDef and RegionDef reference the Join and the TokenRegion, respectively.
-rw-r--r--colm/compiler.cc6
-rw-r--r--colm/lmparse.kh4
-rw-r--r--colm/lmparse.kl53
-rw-r--r--colm/parsetree.cc20
-rw-r--r--colm/parsetree.h18
5 files changed, 42 insertions, 59 deletions
diff --git a/colm/compiler.cc b/colm/compiler.cc
index d757c08c..4a8407aa 100644
--- a/colm/compiler.cc
+++ b/colm/compiler.cc
@@ -694,8 +694,7 @@ void Compiler::createBuiltin( const char *name, BuiltinMachine builtin )
{
Expression *expression = new Expression( builtin );
Join *join = new Join( expression );
- JoinOrLm *joinOrLm = new JoinOrLm( join );
- VarDef *varDef = new VarDef( name, joinOrLm );
+ VarDef *varDef = new VarDef( name, join );
GraphDictEl *graphDictEl = new GraphDictEl( name, varDef );
rootNamespace->rlMap.insert( graphDictEl );
}
@@ -1094,12 +1093,11 @@ void Compiler::createDefaultScanner()
defaultRegion = new TokenRegion( InputLoc(), name,
regionList.length(), 0 );
regionList.append( defaultRegion );
- RegionJoinOrLm *joinOrLm = new RegionJoinOrLm( defaultRegion );
/* Insert the machine definition into the graph dictionary. */
RegionGraphDictEl *newEl = rootNamespace->graphDict.insert( name );
assert( newEl != 0 );
- newEl->value = new RegionVarDef( name, joinOrLm );
+ newEl->value = new RegionDef( name, defaultRegion );
newEl->isInstance = true;
instanceList.append( newEl );
diff --git a/colm/lmparse.kh b/colm/lmparse.kh
index 8e82e844..478b2471 100644
--- a/colm/lmparse.kh
+++ b/colm/lmparse.kh
@@ -78,9 +78,9 @@ struct ColmParser
int token( InputLoc &loc, int tokId, char *tokstart, int toklen );
void addRegularDef( const InputLoc &loc, Namespace *nspace,
- const String &name, JoinOrLm *joinOrLm );
+ const String &name, Join *join );
void addRegionDef( const InputLoc &loc, Namespace *nspace,
- const String &name, RegionJoinOrLm *joinOrLm );
+ const String &name, TokenRegion *join );
void addProduction( const InputLoc &loc, const String &name,
ProdElList *prodElList, bool commit, CodeBlock *redBlock, LangEl *predOf );
void addArgvList();
diff --git a/colm/lmparse.kl b/colm/lmparse.kl
index 356acf71..09f1bff1 100644
--- a/colm/lmparse.kl
+++ b/colm/lmparse.kl
@@ -486,36 +486,32 @@ region_head:
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionIgn );
pd->regionList.append( tokenRegionIgn );
- RegionJoinOrLm *joinOrLmIgn = new RegionJoinOrLm( tokenRegionIgn );
String scannerNameIgn( $2->data.length() + 2, "<%s>-ign", $2->data.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, joinOrLmIgn );
+ 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" ,
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionCi );
pd->regionList.append( tokenRegionCi );
- RegionJoinOrLm *joinOrLmCi = new RegionJoinOrLm( tokenRegionCi );
String scannerNameCi( $2->data.length() + 2, "<%s>-ci", $2->data.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, joinOrLmCi );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, tokenRegionCi );
/* Just for tokens. */
TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), $2->data + "_tok" ,
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionTok );
pd->regionList.append( tokenRegionTok );
- RegionJoinOrLm *joinOrLmTok = new RegionJoinOrLm( tokenRegionTok );
String scannerNameTok( $2->data.length() + 2, "<%s>-tok", $2->data.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, joinOrLmTok );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, tokenRegionTok );
/* Make the new token region. */
TokenRegion *tokenRegion = new TokenRegion( InputLoc(), $2->data,
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegion );
pd->regionList.append( tokenRegion );
- RegionJoinOrLm *joinOrLm = new RegionJoinOrLm( tokenRegion );
String scannerName( $2->data.length() + 2, "<%s>", $2->data.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerName, joinOrLm );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerName, tokenRegion );
regionStack.push( tokenRegion );
tokenRegion->ignoreOnlyRegion = tokenRegionIgn;
@@ -956,36 +952,32 @@ literal_item: opt_no_ignore TK_Literal opt_no_ignore
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionIgn );
pd->regionList.append( tokenRegionIgn );
- RegionJoinOrLm *joinOrLmIgn = new RegionJoinOrLm( tokenRegionIgn );
String scannerNameIgn( name.length() + 2, "<%s>-ign", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, joinOrLmIgn );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, tokenRegionIgn );
/* Just for collect ignores. Will use the ignore-only start state. */
TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), name + "_ci",
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionCi );
pd->regionList.append( tokenRegionCi );
- RegionJoinOrLm *joinOrLmCi = new RegionJoinOrLm( tokenRegionCi );
String scannerNameCi( name.length() + 2, "<%s>-ci", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, joinOrLmCi );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, tokenRegionCi );
/* Just for tokens. */
TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), name + "_tok",
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionTok );
pd->regionList.append( tokenRegionTok );
- RegionJoinOrLm *joinOrLmTok = new RegionJoinOrLm( tokenRegionTok );
String scannerNameTok( name.length() + 2, "<%s>-tok", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, joinOrLmTok );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, tokenRegionTok );
/* Make a new token region just for the token. */
TokenRegion *tokenRegion = new TokenRegion( InputLoc(), $2->data,
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegion );
pd->regionList.append( tokenRegion );
- RegionJoinOrLm *joinOrLm = new RegionJoinOrLm( tokenRegion );
String scannerName( name.length() + 2, "<%s>", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerName, joinOrLm );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerName, tokenRegion );
regionStack.push( tokenRegion );
tokenRegion->ignoreOnlyRegion = tokenRegionIgn;
@@ -1147,8 +1139,7 @@ token_def:
if ( join != 0 ) {
/* Create a regular language definition so the token can be used to
* make other tokens */
- JoinOrLm *joinOrLm = new JoinOrLm( join );
- addRegularDef( $1->loc, namespaceStack.top(), name, joinOrLm );
+ addRegularDef( $1->loc, namespaceStack.top(), name, join );
}
@@ -1187,36 +1178,32 @@ token_def_name:
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionIgn );
pd->regionList.append( tokenRegionIgn );
- RegionJoinOrLm *joinOrLmIgn = new RegionJoinOrLm( tokenRegionIgn );
String scannerNameIgn( name.length() + 2, "<%s>-ign", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, joinOrLmIgn );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameIgn, tokenRegionIgn );
/* Just for explicitly collecting ignores. */
TokenRegion *tokenRegionCi = new TokenRegion( InputLoc(), name + "_ci",
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionCi );
pd->regionList.append( tokenRegionCi );
- RegionJoinOrLm *joinOrLmCi = new RegionJoinOrLm( tokenRegionCi );
String scannerNameCi( name.length() + 2, "<%s>-ci", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, joinOrLmCi );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameCi, tokenRegionCi );
/* Just for tokens. */
TokenRegion *tokenRegionTok = new TokenRegion( InputLoc(), name + "_tok",
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegionTok );
pd->regionList.append( tokenRegionTok );
- RegionJoinOrLm *joinOrLmTok = new RegionJoinOrLm( tokenRegionTok );
String scannerNameTok( name.length() + 2, "<%s>-tok", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, joinOrLmTok );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerNameTok, tokenRegionTok );
/* If not inside a region, make one for the token. */
TokenRegion *tokenRegion = new TokenRegion( InputLoc(), name,
pd->regionList.length(), regionStack.top() );
regionStack.top()->childRegions.append( tokenRegion );
pd->regionList.append( tokenRegion );
- RegionJoinOrLm *joinOrLm = new RegionJoinOrLm( tokenRegion );
String scannerName( name.length() + 2, "<%s>", name.data );
- addRegionDef( InputLoc(), namespaceStack.top(), scannerName, joinOrLm );
+ addRegionDef( InputLoc(), namespaceStack.top(), scannerName, tokenRegion );
regionStack.push( tokenRegion );
tokenRegion->ignoreOnlyRegion = tokenRegionIgn;
@@ -1282,8 +1269,7 @@ rl_def:
KW_Rl machine_name enter_rl '/' rl_join leave_rl '/'
final {
/* Generic creation of machine for instantiation and assignment. */
- JoinOrLm *joinOrLm = new JoinOrLm( $5->join );
- addRegularDef( $2->loc, namespaceStack.top(), $2->data, joinOrLm );
+ addRegularDef( $2->loc, namespaceStack.top(), $2->data, $5->join );
if ( reCaptureVect.length() > 0 )
error($1->loc) << "rl definitions cannot capture vars" << endl;
@@ -2602,8 +2588,7 @@ void ColmParser::init()
TokenRegion *rootRegion = new TokenRegion( InputLoc(), rootRegionName,
pd->regionList.length(), 0 );
pd->regionList.append( rootRegion );
- RegionJoinOrLm *joinOrLm = new RegionJoinOrLm( rootRegion );
- addRegionDef( InputLoc(), namespaceStack.top(), rootRegionName, joinOrLm );
+ addRegionDef( InputLoc(), namespaceStack.top(), rootRegionName, rootRegion );
regionStack.push( rootRegion );
pd->rootRegion = rootRegion;
@@ -2650,12 +2635,12 @@ int ColmParser::parseLangEl( int type, const Token *token )
}
void ColmParser::addRegularDef( const InputLoc &loc, Namespace *nspace,
- const String &name, JoinOrLm *joinOrLm )
+ const String &name, Join *join )
{
GraphDictEl *newEl = nspace->rlMap.insert( name );
if ( newEl != 0 ) {
/* New element in the dict, all good. */
- newEl->value = new VarDef( name, joinOrLm );
+ newEl->value = new VarDef( name, join );
newEl->isInstance = false;
newEl->loc = loc;
}
@@ -2666,12 +2651,12 @@ void ColmParser::addRegularDef( const InputLoc &loc, Namespace *nspace,
}
void ColmParser::addRegionDef( const InputLoc &loc, Namespace *nspace,
- const String &name, RegionJoinOrLm *joinOrLm )
+ const String &name, TokenRegion *tokenRegion )
{
RegionGraphDictEl *newEl = nspace->graphDict.insert( name );
if ( newEl != 0 ) {
/* New element in the dict, all good. */
- newEl->value = new RegionVarDef( name, joinOrLm );
+ newEl->value = new RegionDef( name, tokenRegion );
newEl->isInstance = true;
newEl->loc = loc;
diff --git a/colm/parsetree.cc b/colm/parsetree.cc
index 5a7b6003..5ae345c7 100644
--- a/colm/parsetree.cc
+++ b/colm/parsetree.cc
@@ -186,7 +186,7 @@ FsmGraph *VarDef::walk( Compiler *pd )
NameFrame nameFrame = pd->enterNameScope( true, 1 );
/* Recurse on the expression. */
- FsmGraph *rtnVal = joinOrLm->walk( pd );
+ FsmGraph *rtnVal = join->walk( pd );
/* Do the tranfer of local error actions. */
LocalErrDictEl *localErrDictEl = pd->localErrDict.find( name );
@@ -198,7 +198,7 @@ FsmGraph *VarDef::walk( Compiler *pd )
/* If the expression below is a join operation with multiple expressions
* then it just had epsilon transisions resolved. If it is a join
* with only a single expression then run the epsilon op now. */
- if ( joinOrLm->join->exprList.length() == 1 )
+ if ( join->exprList.length() == 1 )
rtnVal->epsilonOp();
/* We can now unset entry points that are not longer used. */
@@ -221,7 +221,7 @@ void VarDef::makeNameTree( const InputLoc &loc, Compiler *pd )
pd->curNameInst = pd->addNameInst( loc, name, false );
/* Recurse. */
- joinOrLm->makeNameTree( pd );
+ join->makeNameTree( pd );
/* The name scope ends, pop the name instantiation. */
pd->curNameInst = prevNameInst;
@@ -233,19 +233,19 @@ void VarDef::resolveNameRefs( Compiler *pd )
NameFrame nameFrame = pd->enterNameScope( true, 1 );
/* Recurse. */
- joinOrLm->resolveNameRefs( pd );
+ join->resolveNameRefs( pd );
/* The name scope ends, pop the name instantiation. */
pd->popNameScope( nameFrame );
}
-FsmGraph *RegionVarDef::walk( Compiler *pd )
+FsmGraph *RegionDef::walk( Compiler *pd )
{
/* We enter into a new name scope. */
NameFrame nameFrame = pd->enterNameScope( true, 1 );
/* Recurse on the expression. */
- FsmGraph *rtnVal = joinOrLm->walk( pd );
+ FsmGraph *rtnVal = tokenRegion->walk( pd );
/* Do the tranfer of local error actions. */
LocalErrDictEl *localErrDictEl = pd->localErrDict.find( name );
@@ -267,7 +267,7 @@ FsmGraph *RegionVarDef::walk( Compiler *pd )
return rtnVal;
}
-void RegionVarDef::makeNameTree( const InputLoc &loc, Compiler *pd )
+void RegionDef::makeNameTree( const InputLoc &loc, Compiler *pd )
{
/* The variable definition enters a new scope. */
NameInst *prevNameInst = pd->curNameInst;
@@ -276,19 +276,19 @@ void RegionVarDef::makeNameTree( const InputLoc &loc, Compiler *pd )
pd->curNameInst->isLongestMatch = true;
/* Recurse. */
- joinOrLm->makeNameTree( pd );
+ tokenRegion->makeNameTree( pd );
/* The name scope ends, pop the name instantiation. */
pd->curNameInst = prevNameInst;
}
-void RegionVarDef::resolveNameRefs( Compiler *pd )
+void RegionDef::resolveNameRefs( Compiler *pd )
{
/* Entering into a new scope. */
NameFrame nameFrame = pd->enterNameScope( true, 1 );
/* Recurse. */
- joinOrLm->resolveNameRefs( pd );
+ tokenRegion->resolveNameRefs( pd );
/* The name scope ends, pop the name instantiation. */
pd->popNameScope( nameFrame );
diff --git a/colm/parsetree.h b/colm/parsetree.h
index f451d789..ded36445 100644
--- a/colm/parsetree.h
+++ b/colm/parsetree.h
@@ -317,8 +317,8 @@ struct PriorityAug
*/
struct VarDef
{
- VarDef( const String &name, JoinOrLm *joinOrLm )
- : name(name), joinOrLm(joinOrLm) { }
+ VarDef( const String &name, Join *join )
+ : name(name), join(join) { }
/* Parse tree traversal. */
FsmGraph *walk( Compiler *pd );
@@ -326,16 +326,16 @@ struct VarDef
void resolveNameRefs( Compiler *pd );
String name;
- JoinOrLm *joinOrLm;
+ Join *join;
};
/*
* A Variable Definition
*/
-struct RegionVarDef
+struct RegionDef
{
- RegionVarDef( const String &name, RegionJoinOrLm *joinOrLm )
- : name(name), joinOrLm(joinOrLm) { }
+ RegionDef( const String &name, TokenRegion *tokenRegion )
+ : name(name), tokenRegion(tokenRegion) { }
/* Parse tree traversal. */
FsmGraph *walk( Compiler *pd );
@@ -343,7 +343,7 @@ struct RegionVarDef
void resolveNameRefs( Compiler *pd );
String name;
- RegionJoinOrLm *joinOrLm;
+ TokenRegion *tokenRegion;
};
typedef Vector<String> StringVect;
@@ -671,13 +671,13 @@ struct RegionGraphDictEl
{
RegionGraphDictEl( const String &key )
: key(key), value(0), isInstance(false) { }
- RegionGraphDictEl( const String &key, RegionVarDef *value )
+ RegionGraphDictEl( const String &key, RegionDef *value )
: key(key), value(value), isInstance(false) { }
const String &getKey() { return key; }
String key;
- RegionVarDef *value;
+ RegionDef *value;
bool isInstance;
/* Location info of graph definition. Points to variable name of assignment. */