Skip to content
Snippets Groups Projects
Commit e126fffd authored by Tomáš Pecka's avatar Tomáš Pecka Committed by Jan Trávníček
Browse files

GlushkovRTE: Fix subst Follow ; examples

parent e0a55258
No related branches found
No related tags found
No related merge requests found
......@@ -30,7 +30,7 @@ std::set < GlushkovSymbol > GlushkovTraversal::first ( rte::FormalRTE const & re
std::set < GlushkovSymbol > firstSet, symbolSet = getSymbols ( re );
 
for ( auto const & s : first ( & re.getRTE ( ) ) ) {
std::cerr << "In first set: " << s->getSymbol ( ) << std::endl;
std::cerr << "In first set: " << s -> getSymbol ( ) << std::endl;
firstSet.insert ( findSymbol ( s, symbolSet ) );
}
 
......@@ -52,13 +52,13 @@ std::set < GlushkovSymbol > GlushkovTraversal::first ( rte::FormalRTE const & re
std::set < std::vector < GlushkovSymbol > > GlushkovTraversal::follow ( rte::FormalRTE const & re, GlushkovSymbol const & symbol ) {
std::set < GlushkovSymbol > symbolSet = getSymbols ( re );
std::set < std::vector < GlushkovSymbol > > followSet;
std::set < alphabet::RankedSymbol> alphabetK = re.getConstantAlphabet();
std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > symbMap;
 
for ( const auto & csymbol : re.getConstantAlphabet ( ) )
for ( const auto & csymbol : alphabetK )
symbMap.insert ( std::make_pair ( csymbol, std::set < rte::FormalRTESymbol const * > ( ) ) );
 
for ( const auto & f : follow ( & re.getRTE ( ), symbol.getSymbolPtr ( ), symbMap ) ) {
for ( const auto & f : follow ( & re.getRTE ( ), symbol.getSymbolPtr ( ), alphabetK, symbMap ) ) {
std::vector < GlushkovSymbol > curr;
 
for ( const auto & s : f )
......@@ -215,7 +215,7 @@ std::set < rte::FormalRTESymbol const * > GlushkovTraversal::first ( rte::Formal
 
// ----------------------------------------------------------------------------
 
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEElement const * const & node, rte::FormalRTESymbol const * const & symbolptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEElement const * const & node, rte::FormalRTESymbol const * const & symbolptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) {
rte::FormalRTEAlternation const * const alternation = dynamic_cast < rte::FormalRTEAlternation const * const > ( node );
rte::FormalRTESubstitution const * const concatenation = dynamic_cast < rte::FormalRTESubstitution const * const > ( node );
rte::FormalRTEIteration const * const iteration = dynamic_cast < rte::FormalRTEIteration const * const > ( node );
......@@ -223,19 +223,19 @@ std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::fol
rte::FormalRTEEmpty const * const empty = dynamic_cast < rte::FormalRTEEmpty const * const > ( node );
 
if ( alternation )
return follow ( alternation, symbolptr, subMap );
return follow ( alternation, symbolptr, alphabetK, subMap );
 
else if ( concatenation )
return follow ( concatenation, symbolptr, subMap );
return follow ( concatenation, symbolptr, alphabetK, subMap );
 
else if ( iteration )
return follow ( iteration, symbolptr, subMap );
return follow ( iteration, symbolptr, alphabetK, subMap );
 
else if ( symbol )
return follow ( symbol, symbolptr, subMap );
return follow ( symbol, symbolptr, alphabetK, subMap );
 
else if ( empty )
return follow ( empty, symbolptr, subMap );
return follow ( empty, symbolptr, alphabetK, subMap );
 
throw exception::CommonException ( "GlushkovTraversal::follow() - unknown RegExpElement node" );
}
......@@ -257,13 +257,13 @@ std::ostream & operator <<( std::ostream & os, const std::set < std::vector < rt
return os;
}
 
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEAlternation const * const & node, rte::FormalRTESymbol const * const & symbolptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEAlternation const * const & node, rte::FormalRTESymbol const * const & symbolptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > ret, tmp;
 
tmp = follow ( & node->getLeftElement ( ), symbolptr, subMap );
tmp = follow ( & node->getLeftElement ( ), symbolptr, alphabetK, subMap );
ret.insert ( tmp.begin ( ), tmp.end ( ) );
 
tmp = follow ( & node->getRightElement ( ), symbolptr, subMap );
tmp = follow ( & node->getRightElement ( ), symbolptr, alphabetK, subMap );
ret.insert ( tmp.begin ( ), tmp.end ( ) );
 
std::cerr << "FollowAlt(" << symbolptr->getSymbol ( ) << "): " << ret << std::endl;
......@@ -271,7 +271,7 @@ std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::fol
return ret;
}
 
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTESubstitution const * const & node, rte::FormalRTESymbol const * const & symbolptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTESubstitution const * const & node, rte::FormalRTESymbol const * const & symbolptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) {
 
std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subMap2 ( subMap );
auto itMap = subMap2.find ( node->getSubstitutionSymbol ( ).getSymbol ( ) );
......@@ -290,34 +290,67 @@ std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::fol
std::set < std::vector < rte::FormalRTESymbol const * > > ret;
 
if ( pos ( & node->getLeftElement ( ), symbolptr ) )
ret = follow ( & node->getLeftElement ( ), symbolptr, subMap2 );
ret = follow ( & node->getLeftElement ( ), symbolptr, alphabetK, subMap2 );
else
ret = follow ( & node->getRightElement ( ), symbolptr, subMap2 );
ret = follow ( & node->getRightElement ( ), symbolptr, alphabetK, subMap );
 
std::cerr << "FollowSub(" << symbolptr->getSymbol ( ) << "): " << ret << std::endl;
return ret;
}
 
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEIteration const * const & node, rte::FormalRTESymbol const * const & symbolptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEIteration const * const & node, rte::FormalRTESymbol const * const & symbolptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) {
 
std::set < std::vector < rte::FormalRTESymbol const * > > ret;
 
for ( const auto & s : first ( & node->getElement ( ) ) )
subMap[node->getSubstitutionSymbol ( ).getSymbol ( )].insert ( s );
 
ret = follow ( & node->getElement ( ), symbolptr, subMap );
ret = follow ( & node->getElement ( ), symbolptr, alphabetK, subMap );
 
std::cerr << "FollowIter(" << symbolptr->getSymbol ( ) << "): " << ret << std::endl;
return ret;
}
 
std::set < std::vector < rte::FormalRTESymbol const * > > replaceConstants ( const std::vector < rte::FormalRTESymbol const * > & f, const std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) {
void preprocessSubMap(const std::set<alphabet::RankedSymbol>& alphabetK, std::map<alphabet::RankedSymbol, std::set<rte::FormalRTESymbol const*>> & subMap)
{
bool change = true;
while(change)
{
change = false;
for(auto& kv : subMap)
{
std::set<rte::FormalRTESymbol const*>& value = kv.second;
for(const auto& v : value)
{
if(alphabetK.find(v -> getSymbol()) == alphabetK.end()) continue;
std::cerr << "Gonna replace in submap: " << kv.first << ": " << v->getSymbol() << std::endl;
auto it = subMap.find(v -> getSymbol() );
size_t vsize = value.size();
value.insert(it->second.begin(), it->second.end());
change = (vsize != value.size());
value.erase(v);
for(const auto& x : it->second)
std::cerr << "\t" << x->getSymbol() << std::endl;
}
}
}
}
std::set < std::vector < rte::FormalRTESymbol const * > > replaceConstants ( const std::set<alphabet::RankedSymbol>& alphabetK, const std::vector < rte::FormalRTESymbol const * > & f, const std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap2 ) {
std::cerr << " replC for " << f << std::endl;
 
std::set < std::vector < rte::FormalRTESymbol const * > > ret;
 
if ( f.size ( ) == 0 ) return ret;
 
std::map<alphabet::RankedSymbol, std::set<rte::FormalRTESymbol const*>> subMap(subMap2);
preprocessSubMap(alphabetK, subMap);
auto subIt = subMap.find ( f[0]->getSymbol ( ) );
 
if ( subIt == subMap.end ( ) ) {
......@@ -370,24 +403,24 @@ std::set < std::vector < rte::FormalRTESymbol const * > > replaceConstants ( con
return ret;
}
 
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTESymbol const * const & node, rte::FormalRTESymbol const * const & symbolptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTESymbol const * const & node, rte::FormalRTESymbol const * const & symbolptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subMap ) {
std::set < std::vector < rte::FormalRTESymbol const * > > ret;
std::vector < rte::FormalRTESymbol const * > children = node->getElements ( );
 
if ( symbolptr == node ) {
ret = replaceConstants ( children, subMap );
ret = replaceConstants ( alphabetK, children, subMap );
std::cerr << "FollowSymbol1(" << symbolptr->getSymbol ( ) << "): " << ret << std::endl;
return ret;
}
 
for ( const auto & c : children )
if ( pos ( c, symbolptr ) )
return follow ( c, symbolptr, subMap );
return follow ( c, symbolptr, alphabetK, subMap );
 
return std::set < std::vector < rte::FormalRTESymbol const * > > ( );
}
 
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEEmpty const * const & /* node */, rte::FormalRTESymbol const * const & /* symbolptr */, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > /* subMap */ ) {
std::set < std::vector < rte::FormalRTESymbol const * > > GlushkovTraversal::follow ( rte::FormalRTEEmpty const * const & /* node */, rte::FormalRTESymbol const * const & /* symbolptr */, const std::set<alphabet::RankedSymbol>& /* alphabetK */, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & /* subMap */ ) {
return std::set < std::vector < rte::FormalRTESymbol const * > > ( );
}
 
......
......@@ -86,12 +86,12 @@ private:
static bool pos ( rte::FormalRTESymbol const * const & node, rte::FormalRTESymbol const * const & symbSearch );
static bool pos ( rte::FormalRTEEmpty const * const & node, rte::FormalRTESymbol const * const & symbSearch );
 
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEElement const * const & node, rte::FormalRTESymbol const * const & symbptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEAlternation const * const & node, rte::FormalRTESymbol const * const & symbptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTESubstitution const * const & node, rte::FormalRTESymbol const * const & symbptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEIteration const * const & node, rte::FormalRTESymbol const * const & symbptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTESymbol const * const & node, rte::FormalRTESymbol const * const & symbptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEEmpty const * const & node, rte::FormalRTESymbol const * const & symbptr, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEElement const * const & node, rte::FormalRTESymbol const * const & symbptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEAlternation const * const & node, rte::FormalRTESymbol const * const & symbptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTESubstitution const * const & node, rte::FormalRTESymbol const * const & symbptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEIteration const * const & node, rte::FormalRTESymbol const * const & symbptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTESymbol const * const & node, rte::FormalRTESymbol const * const & symbptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subM );
static std::set < std::vector < rte::FormalRTESymbol const * > > follow ( rte::FormalRTEEmpty const * const & node, rte::FormalRTESymbol const * const & symbptr, const std::set<alphabet::RankedSymbol>& alphabetK, std::map < alphabet::RankedSymbol, std::set < rte::FormalRTESymbol const * > > & subM );
};
 
} /* namespace rte */
......
<FormalRTE>
<alphabet>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel></LabeledSymbol><Unsigned>2</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</alphabet>
<constantAlphabet>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>y</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</constantAlphabet>
<substitution>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<substitution>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>y</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<iteration>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<iteration>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>y</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel></LabeledSymbol><Unsigned>2</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>y</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</symbol>
</iteration>
</iteration>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</substitution>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</substitution>
</FormalRTE>
<FormalRTE>
<alphabet>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel></LabeledSymbol><Unsigned>2</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>d</Character></PrimitiveLabel></LabeledSymbol><Unsigned>1</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</alphabet>
<constantAlphabet>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</constantAlphabet>
<substitution>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<substitution>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<iteration>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>d</Character></PrimitiveLabel></LabeledSymbol><Unsigned>1</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</symbol>
</iteration>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel></LabeledSymbol><Unsigned>2</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</symbol>
</substitution>
<symbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</substitution>
</FormalRTE>
<FormalRTE>
<alphabet>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel></LabeledSymbol><Unsigned>2</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>d</Character></PrimitiveLabel></LabeledSymbol><Unsigned>1</Unsigned></RankedSymbol>
</alphabet>
<constantAlphabet>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>y</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
<RankedSymbol><LabeledSymbol><PrimitiveLabel><Character>z</Character></PrimitiveLabel></LabeledSymbol><Unsigned>0</Unsigned></RankedSymbol>
</constantAlphabet>
<substitution>
<RankedSymbol><SymbolRef id="4"/><Unsigned>0</Unsigned></RankedSymbol>
<substitution>
<RankedSymbol><SymbolRef id="5"/><Unsigned>0</Unsigned></RankedSymbol>
<iteration>
<RankedSymbol><SymbolRef id="4"/><Unsigned>0</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><SymbolRef id="3"/><Unsigned>1</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><SymbolRef id="0"/><Unsigned>2</Unsigned></RankedSymbol>
<symbol>
<RankedSymbol><SymbolRef id="4"/><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
<symbol>
<RankedSymbol><SymbolRef id="5"/><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</symbol>
</symbol>
</iteration>
<alternation>
<symbol>
<RankedSymbol><SymbolRef id="1"/><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
<symbol>
<RankedSymbol><SymbolRef id="2"/><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</alternation>
</substitution>
<symbol>
<RankedSymbol><SymbolRef id="1"/><Unsigned>0</Unsigned></RankedSymbol>
</symbol>
</substitution>
</FormalRTE>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment