xrel.parser
Class ErrorCheckVisitor
java.lang.Object
|
+--xrel.parser.ErrorCheckVisitor
- All Implemented Interfaces:
- SymElementKind, XRelParserVisitor
- public class ErrorCheckVisitor
- extends java.lang.Object
- implements XRelParserVisitor, SymElementKind
This is a JJTree visitor that checks for syntax errors in the
syntax tree of the program.
Here's a list of the collected errors:
- detection of unknown identifiers
- check that variables are not used in type declarations
(typedef/export)
- check that variables are only defined and not used in patterns
- check that the identifier used in the typeswitch statement is a
variable declared in the import clause
- check that identifiers in code blocks are variables declared
in the import clause or in the current clause
- check that there are not bindings in code blocks
A list of errors that are NOT collected from this visitor:
- check that variables are not defined in type declarations
(checked at parsing phase)
- check that an identifier bound in a pattern is not a type
name (checked at parsing phase)
- redefinition of Any type (checked at parsing phase)
- Warning: global variable hidden
- all the linearity constraints for patterns
- check that there is not recursion at top-level for types
- all the semantics checks (irredundancy and exhaustivity of the
clauses, adherence to the output type etc.)
N.B.:
- Why to use JJTree visitors instead of normal tree visits?
When new node types are added (this happens almost every time
the grammar is changed) JJTree visitors give errors, so that
it's easy to understand where code needs changes.
JJTree documentation says this is a feature: in my opinion this
is the unique feature, however this feature is essential.
The drawback is that visitors are less easy to read and to
understand.
- Author:
- Fabrizio Bisi
- See Also:
WellFormedness
,
SemanticChecks
Fields inherited from interface xrel.parser.SymElementKind |
EXPRESSION, LABEL, PATTERN, S_EXPRESSIONS, S_LABELS, S_PATTERNS, S_TYPES, S_VARIABLES, TYPE, UNDEFINED, VARIABLE |
Method Summary |
java.lang.Object |
visit(ASTAs node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTCase node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTComma node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTEmpty node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTExportTp node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTIdentifier node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTImportSt node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTOperator node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTPar node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTProgram node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTStatementList node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTStringLiteral node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTString node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTSwitchCase node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTTag node,
java.lang.Object data)
|
java.lang.Object |
visit(ASTTypeDecl node,
java.lang.Object data)
|
java.lang.Object |
visit(SimpleNode node,
java.lang.Object data)
Default visitor. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ExprKind
protected int ExprKind
symtab
protected SymTable symtab
ErrorCheckVisitor
public ErrorCheckVisitor(SymTable s)
- Builds the object.
- Parameters:
s
- the symbol table
visit
public java.lang.Object visit(SimpleNode node,
java.lang.Object data)
- Default visitor. It should never be called.
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTTypeDecl node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTImportSt node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTExportTp node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTSwitchCase node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTCase node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTStatementList node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTAs node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTIdentifier node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTProgram node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTPar node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTComma node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTOperator node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTTag node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTEmpty node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTString node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor
visit
public java.lang.Object visit(ASTStringLiteral node,
java.lang.Object data)
- Specified by:
visit
in interface XRelParserVisitor