diff options
author | Adrian Thurston <thurston@complang.org> | 2012-05-28 18:21:19 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2012-05-28 18:21:19 -0400 |
commit | 6f5e276c1b14cf356c9c3183dad98b8df99febdf (patch) | |
tree | 632be9b178138fd3a29816b30d8f3e9cb502dc9a | |
parent | 24f39e9b43a591701cbaba4845fcc14edb585864 (diff) | |
download | colm-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.cc | 6 | ||||
-rw-r--r-- | colm/lmparse.kh | 4 | ||||
-rw-r--r-- | colm/lmparse.kl | 53 | ||||
-rw-r--r-- | colm/parsetree.cc | 20 | ||||
-rw-r--r-- | colm/parsetree.h | 18 |
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. */ |