Skip to content
Snippets Groups Projects
Commit d7bd806d authored by dgelessus's avatar dgelessus
Browse files

Refactor code generation for New terms

parent 6ffadb8a
No related branches found
No related tags found
No related merge requests found
......@@ -410,8 +410,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
}
}
@Override
public void outANewTerm(ANewTerm node)
private void generateNewTerm(Node node, AProdName prodName, List<PTerm> params)
{
String type_name;
if(simpleTermTransformMap.get(node) != null)
......@@ -423,7 +422,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
type_name = CG.getAltTransformElemTypes().get(node);
}
int position = CG.getTermNumbers().get(node);
String newAltName = name((AProdName)node.getProdName());
String newAltName = name(prodName);
try
{
......@@ -437,11 +436,11 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
}
macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
if(node.getParams().size() > 0)
if(!params.isEmpty())
{
String isNotTheFirstParam = "";
for(PTerm term : node.getParams())
for(PTerm term : params)
{
if(simpleTermTransformMap.get(term) != null)
{
......@@ -484,75 +483,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
}
@Override
public void outANewListTerm(ANewListTerm node)
{
String type_name;
if(simpleTermTransformMap.get(node) != null)
{
type_name = simpleTermTransformMap.get(node);
}
else
{
type_name = CG.getAltTransformElemTypes().get(node);
}
int position = CG.getTermNumbers().get(node);
String newAltName = name((AProdName)node.getProdName());
try
{
if(type_name.startsWith("L"))
{
type_name = "list";
}
else
{
type_name = type_name.toLowerCase();
}
macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
if(node.getParams().size() > 0)
{
String isNotTheFirstParam = "";
for(PTerm term : node.getParams())
{
if(simpleTermTransformMap.get(term) != null)
{
type_name = simpleTermTransformMap.get(term);
}
else
{
type_name = CG.getAltTransformElemTypes().get(term);
}
position = CG.getTermNumbers().get(term);
if(type_name.equals("null"))
{
macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"});
}
else
{
if(type_name.startsWith("L"))
{
type_name = "list";
}
else
public void outANewTerm(ANewTerm node)
{
type_name = type_name.toLowerCase();
}
macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position});
generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
}
isNotTheFirstParam = ", ";
}
}
macros.apply(file, "ParserNewBodyNewTail");
macros.apply(file, "ParserBraceClosing");
}
catch(IOException e)
@Override
public void outANewListTerm(ANewListTerm node)
{
throw new RuntimeException("An error occured while writing to " +
new File(pkgDir, "TokenIndex.java").getAbsolutePath(), e);
}
generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
}
public String name(AProdName node)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment