Browse Source

Improvements to module renaming error reporting.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@906 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 17 years ago
parent
commit
fdc9b7d760
  1. 18
      prism/src/parser/PrismParser.java
  2. 14
      prism/src/parser/PrismParser.jj
  3. 12
      prism/src/parser/ast/Module.java
  4. 9
      prism/src/parser/ast/ModulesFile.java
  5. 24
      prism/src/parser/ast/RenamedModule.java

18
prism/src/parser/PrismParser.java

@ -852,14 +852,14 @@ public class PrismParser implements PrismParserConstants {
// Module
static final public Module Module() throws ParseException {
String name = null;
ExpressionIdent name = null;
Declaration var = null;
Command comm = null;
Module module = null;
Token begin = null;
begin = jj_consume_token(MODULE);
name = Identifier();
module = new Module(name);
name = IdentifierExpression();
module = new Module(name.getName());
label_6:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@ -887,7 +887,7 @@ public class PrismParser implements PrismParserConstants {
module.addCommand(comm);
}
jj_consume_token(ENDMODULE);
module.setPosition(begin, getToken(0)); {if (true) return module;}
module.setPosition(begin, getToken(0)); module.setNameASTElement(name); {if (true) return module;}
throw new Error("Missing return statement in function");
}
@ -1034,14 +1034,14 @@ public class PrismParser implements PrismParserConstants {
// Module renaming
static final public RenamedModule RenamedModule() throws ParseException {
String name = null, base = null;
ExpressionIdent name = null, base = null;
RenamedModule rm = null;
Token begin = null;
begin = jj_consume_token(MODULE);
name = Identifier();
name = IdentifierExpression();
jj_consume_token(EQ);
base = Identifier();
rm = new RenamedModule(name, base);
base = IdentifierExpression();
rm = new RenamedModule(name.getName(), base.getName());
jj_consume_token(LBRACKET);
Rename(rm);
label_10:
@ -1059,7 +1059,7 @@ public class PrismParser implements PrismParserConstants {
}
jj_consume_token(RBRACKET);
jj_consume_token(ENDMODULE);
rm.setPosition(begin, getToken(0)); {if (true) return rm;}
rm.setPosition(begin, getToken(0)); rm.setNameASTElement(name); rm.setBaseModuleASTElement(base); {if (true) return rm;}
throw new Error("Missing return statement in function");
}

14
prism/src/parser/PrismParser.jj

@ -659,7 +659,7 @@ Declaration Declaration() :
Token begin = null;
}
{
( { begin = getToken(1);} name = Identifier() <COLON>
( { begin = getToken(1); } name = Identifier() <COLON>
// Integer-range variable declaration
(( <LBRACKET> low = Expression(false, false) <DOTS> high = Expression(false, false) <RBRACKET> ( <INIT> init = Expression(false, false) )? <SEMICOLON>
{ decl = new Declaration(name, low, high, init); } )
@ -672,18 +672,18 @@ Declaration Declaration() :
Module Module() :
{
String name = null;
ExpressionIdent name = null;
Declaration var = null;
Command comm = null;
Module module = null;
Token begin = null;
}
{
begin = <MODULE> name = Identifier() { module = new Module(name); }
begin = <MODULE> name = IdentifierExpression() { module = new Module(name.getName()); }
( var = Declaration() { module.addDeclaration(var); } )*
( comm = Command() { module.addCommand(comm); } )*
<ENDMODULE>
{ module.setPosition(begin, getToken(0)); return module; }
{ module.setPosition(begin, getToken(0)); module.setNameASTElement(name); return module; }
}
// Command
@ -755,14 +755,14 @@ void UpdateElement(Update update) :
RenamedModule RenamedModule() :
{
String name = null, base = null;
ExpressionIdent name = null, base = null;
RenamedModule rm = null;
Token begin = null;
}
{
begin = <MODULE> name = Identifier() <EQ> base = Identifier() { rm = new RenamedModule(name, base); }
begin = <MODULE> name = IdentifierExpression() <EQ> base = IdentifierExpression() { rm = new RenamedModule(name.getName(), base.getName()); }
<LBRACKET> Rename(rm) ( <COMMA> Rename(rm) )* <RBRACKET> <ENDMODULE>
{ rm.setPosition(begin, getToken(0)); return rm; }
{ rm.setPosition(begin, getToken(0)); rm.setNameASTElement(name); rm.setBaseModuleASTElement(base); return rm; }
}
void Rename(RenamedModule rm) :

12
prism/src/parser/ast/Module.java

@ -36,6 +36,7 @@ public class Module extends ASTElement
{
// Module name
private String name;
private ExpressionIdent nameASTElement;
// Local variables
private ArrayList<Declaration> decls;
// Commands
@ -59,6 +60,11 @@ public class Module extends ASTElement
name = n;
}
public void setNameASTElement(ExpressionIdent e)
{
nameASTElement = e;
}
public void addDeclaration(Declaration d)
{
decls.add(d);
@ -93,6 +99,11 @@ public class Module extends ASTElement
return name;
}
public ExpressionIdent getNameASTElement()
{
return nameASTElement;
}
public int getNumDeclarations()
{
return decls.size();
@ -187,6 +198,7 @@ public class Module extends ASTElement
{
int i, n;
Module ret = new Module(name);
ret.setNameASTElement((ExpressionIdent)nameASTElement.deepCopy());
n = getNumDeclarations();
for (i = 0; i < n; i++) {
ret.addDeclaration((Declaration)getDeclaration(i).deepCopy());

9
prism/src/parser/ast/ModulesFile.java

@ -401,6 +401,7 @@ public class ModulesFile extends ASTElement
{
int i, j, n, i2, n2;
RenamedModule module;
Module newModule;
String s;
Object o;
@ -416,7 +417,7 @@ public class ModulesFile extends ASTElement
if (j == -1) {
s = "No such module " + module.getBaseModule();
s += " in renamed module \"" + module.getName() + "\"";
throw new PrismLangException(s, module);
throw new PrismLangException(s, module.getBaseModuleASTElement());
}
// Check for invalid renames
n2 = module.getNumRenames();
@ -427,7 +428,9 @@ public class ModulesFile extends ASTElement
}
}
// Then rename (a copy of) base module and replace
setModule(i, (Module) getModule(j).deepCopy().rename(module));
newModule = (Module) getModule(j).deepCopy().rename(module);
newModule.setNameASTElement(module.getNameASTElement());
setModule(i, newModule);
}
}
@ -473,7 +476,7 @@ public class ModulesFile extends ASTElement
s = getModule(i).getName();
for (j = 0; j < i; j++) {
if (s.equals(moduleNames[j])) {
throw new PrismLangException("Duplicated module name \"" + s + "\"", getModule(i));
throw new PrismLangException("Duplicated module name \"" + s + "\"", getModule(i).getNameASTElement());
}
}
moduleNames[i] = s;

24
prism/src/parser/ast/RenamedModule.java

@ -34,7 +34,9 @@ import prism.PrismLangException;
public class RenamedModule extends ASTElement
{
private String name;
private ExpressionIdent nameASTElement;
private String baseModule;
private ExpressionIdent baseModuleASTElement;
private ArrayList<String> oldNames;
private ArrayList<String> newNames;
@ -55,11 +57,21 @@ public class RenamedModule extends ASTElement
name = n;
}
public void setNameASTElement(ExpressionIdent e)
{
nameASTElement = e;
}
public void setBaseModule(String b)
{
baseModule = b;
}
public void setBaseModuleASTElement(ExpressionIdent e)
{
baseModuleASTElement = e;
}
public void addRename(String s1, String s2)
{
oldNames.add(s1);
@ -73,11 +85,21 @@ public class RenamedModule extends ASTElement
return name;
}
public ExpressionIdent getNameASTElement()
{
return nameASTElement;
}
public String getBaseModule()
{
return baseModule;
}
public ExpressionIdent getBaseModuleASTElement()
{
return baseModuleASTElement;
}
public String getNewName(String s)
{
int i = oldNames.indexOf(s);
@ -146,6 +168,8 @@ public class RenamedModule extends ASTElement
{
int i, n;
RenamedModule ret = new RenamedModule(name, baseModule);
ret.setNameASTElement((ExpressionIdent)nameASTElement.deepCopy());
ret.setBaseModuleASTElement((ExpressionIdent)baseModuleASTElement.deepCopy());
n = oldNames.size();
for (i = 0; i < n; i++) {
ret.addRename(oldNames.get(i), newNames.get(i));

Loading…
Cancel
Save