Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
sarah.grebing
ProofScriptParser
Commits
08f697b5
Commit
08f697b5
authored
Aug 29, 2017
by
Sarah Grebing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
closes expression in parser
parent
c951d29c
Pipeline
#13169
failed with stage
in 44 seconds
Changes
12
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
142 additions
and
39 deletions
+142
-39
lang/src/main/antlr4/edu/kit/iti/formal/psdbg/parser/ScriptLanguage.g4
.../antlr4/edu/kit/iti/formal/psdbg/parser/ScriptLanguage.g4
+8
-10
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ASTChanger.java
...main/java/edu/kit/iti/formal/psdbg/parser/ASTChanger.java
+12
-4
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ASTTraversal.java
...in/java/edu/kit/iti/formal/psdbg/parser/ASTTraversal.java
+9
-2
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/DefaultASTVisitor.java
...va/edu/kit/iti/formal/psdbg/parser/DefaultASTVisitor.java
+6
-2
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/TransformAst.java
...in/java/edu/kit/iti/formal/psdbg/parser/TransformAst.java
+20
-6
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/Visitor.java
...rc/main/java/edu/kit/iti/formal/psdbg/parser/Visitor.java
+3
-1
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/ClosesCase.java
.../java/edu/kit/iti/formal/psdbg/parser/ast/ClosesCase.java
+48
-0
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/tryCase.java
...ain/java/edu/kit/iti/formal/psdbg/parser/ast/tryCase.java
+5
-5
lang/src/test/resources/edu/kit/iti/formal/psdbg/parser/scripts/closesAndTrycases.txt
...kit/iti/formal/psdbg/parser/scripts/closesAndTrycases.txt
+22
-0
pom.xml
pom.xml
+1
-1
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/KeyInterpreter.java
.../edu/kit/iti/formal/psdbg/interpreter/KeyInterpreter.java
+5
-5
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/Interpreter.java
...ava/edu/kit/iti/formal/psdbg/interpreter/Interpreter.java
+3
-3
No files found.
lang/src/main/antlr4/edu/kit/iti/formal/psdbg/parser/ScriptLanguage.g4
View file @
08f697b5
...
...
@@ -114,17 +114,13 @@ casesStmt
;
casesList
// : simpleCase
// | closableCase
: CASE (ISCLOSED | expression) COLON? INDENT stmtList DEDENT
: CASE (TRY | expression | closesExpression) COLON? INDENT stmtList DEDENT
;
/*simpleCase
: CASE expression COLON? INDENT stmtList DEDENT
;
closableCase
: CASE MATCH ISCLOSED COLON? INDENT stmtList DEDENT
closesExpression
: CLOSES closesScript= scriptCommand
;
*/
forEachStmt
: FOREACH INDENT stmtList DEDENT
;
...
...
@@ -133,6 +129,7 @@ theOnlyStmt
: THEONLY INDENT stmtList DEDENT
;
scriptCommand
: cmd=ID parameters? SEMICOLON
;
...
...
@@ -155,7 +152,8 @@ MULTI_LINE_COMMENT : '/*' (MULTI_LINE_COMMENT|.)*? '*/' -> channel(HIDDEN);
CASES: 'cases';
CASE: 'case';
ISCLOSED: 'isCloseable';
TRY: 'try';
CLOSES: 'closes';
DERIVABLE : 'derivable';
DEFAULT: 'default';
ASSIGN : ':=';
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ASTChanger.java
View file @
08f697b5
...
...
@@ -23,8 +23,9 @@ package edu.kit.iti.formal.psdbg.parser;
*/
import
edu.kit.iti.formal.psdbg.parser.types.Type
;
import
edu.kit.iti.formal.psdbg.parser.ast.*
;
import
edu.kit.iti.formal.psdbg.parser.types.Type
;
import
java.util.ArrayList
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -111,9 +112,9 @@ public class ASTChanger extends DefaultASTVisitor<ASTNode> {
}
@Override
public
IsClosable
Case
visit
(
IsClosableCase
isClosable
Case
)
{
isClosable
Case
.
getBody
().
accept
(
this
);
return
isClosable
Case
;
public
try
Case
visit
(
tryCase
try
Case
)
{
try
Case
.
getBody
().
accept
(
this
);
return
try
Case
;
}
@Override
...
...
@@ -123,6 +124,13 @@ public class ASTChanger extends DefaultASTVisitor<ASTNode> {
return
simpleCaseStatement
;
}
@Override
public
ASTNode
visit
(
ClosesCase
closesCase
)
{
closesCase
.
getClosesScript
().
accept
(
this
);
closesCase
.
getBody
().
accept
(
this
);
return
closesCase
;
}
@Override
public
CaseStatement
visit
(
CaseStatement
caseStatement
)
{
//caseStatement.getGuard().accept(this);
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ASTTraversal.java
View file @
08f697b5
...
...
@@ -161,8 +161,8 @@ public interface ASTTraversal<T> extends Visitor<T> {
}
@Override
default
T
visit
(
IsClosableCase
isClosable
Case
)
{
isClosable
Case
.
getBody
().
accept
(
this
);
default
T
visit
(
tryCase
try
Case
)
{
try
Case
.
getBody
().
accept
(
this
);
return
null
;
}
...
...
@@ -181,4 +181,11 @@ public interface ASTTraversal<T> extends Visitor<T> {
}
return
null
;
}
@Override
default
T
visit
(
ClosesCase
closesCase
)
{
closesCase
.
getClosesScript
().
accept
(
this
);
closesCase
.
getBody
().
accept
(
this
);
return
null
;
}
}
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/DefaultASTVisitor.java
View file @
08f697b5
...
...
@@ -133,8 +133,8 @@ public class DefaultASTVisitor<T> implements Visitor<T> {
}
@Override
public
T
visit
(
IsClosableCase
isClosable
Case
)
{
return
defaultVisit
(
isClosable
Case
);
public
T
visit
(
tryCase
try
Case
)
{
return
defaultVisit
(
try
Case
);
}
@Override
...
...
@@ -142,5 +142,9 @@ public class DefaultASTVisitor<T> implements Visitor<T> {
return
defaultVisit
(
simpleCaseStatement
);
}
@Override
public
T
visit
(
ClosesCase
closesCase
)
{
return
defaultVisit
(
closesCase
);
}
}
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/TransformAst.java
View file @
08f697b5
...
...
@@ -23,6 +23,7 @@ package edu.kit.iti.formal.psdbg.parser;
*/
import
edu.kit.iti.formal.psdbg.parser.ast.*
;
import
edu.kit.iti.formal.psdbg.parser.types.TypeFacade
;
import
org.antlr.v4.runtime.ParserRuleContext
;
import
org.antlr.v4.runtime.tree.ErrorNode
;
...
...
@@ -34,7 +35,6 @@ import java.util.ArrayList;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
edu.kit.iti.formal.psdbg.parser.ast.*
;
/**
* @author Alexander Weigl
...
...
@@ -318,11 +318,20 @@ public class TransformAst implements ScriptLanguageVisitor<Object> {
@Override
public
Object
visitCasesList
(
ScriptLanguageParser
.
CasesListContext
ctx
)
{
if
(
ctx
.
ISCLOSED
()
!=
null
)
{
IsClosableCase
isClosableCase
=
new
IsClosableCase
();
isClosableCase
.
setRuleContext
(
ctx
);
isClosableCase
.
setBody
((
Statements
)
ctx
.
stmtList
().
accept
(
this
));
return
isClosableCase
;
if
(
ctx
.
TRY
()
!=
null
)
{
tryCase
tryCase
=
new
tryCase
();
tryCase
.
setRuleContext
(
ctx
);
tryCase
.
setBody
((
Statements
)
ctx
.
stmtList
().
accept
(
this
));
return
tryCase
;
}
if
(
ctx
.
closesExpression
()
!=
null
)
{
ClosesCase
closesCase
=
new
ClosesCase
();
closesCase
.
setClosedStmt
(
true
);
closesCase
.
setRuleContext
(
ctx
);
closesCase
.
setClosesScript
((
CallStatement
)
ctx
.
closesExpression
().
closesScript
.
accept
(
this
));
closesCase
.
setBody
((
Statements
)
ctx
.
stmtList
().
accept
(
this
));
return
closesCase
;
}
else
{
SimpleCaseStatement
caseStatement
=
new
SimpleCaseStatement
();
caseStatement
.
setRuleContext
(
ctx
);
...
...
@@ -338,6 +347,11 @@ public class TransformAst implements ScriptLanguageVisitor<Object> {
}
@Override
public
Object
visitClosesExpression
(
ScriptLanguageParser
.
ClosesExpressionContext
ctx
)
{
return
null
;
}
/*
@Override
public Object visitSimpleCase(ScriptLanguageParser.SimpleCaseContext ctx) {
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/Visitor.java
View file @
08f697b5
...
...
@@ -68,11 +68,13 @@ public interface Visitor<T> {
T
visit
(
UnaryExpression
e
);
T
visit
(
IsClosableCase
isClosable
Case
);
T
visit
(
tryCase
try
Case
);
T
visit
(
SimpleCaseStatement
simpleCaseStatement
);
T
visit
(
CaseStatement
caseStatement
);
T
visit
(
SubstituteExpression
subst
);
T
visit
(
ClosesCase
colsesCase
);
}
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/ClosesCase.java
0 → 100644
View file @
08f697b5
package
edu.kit.iti.formal.psdbg.parser.ast
;
import
edu.kit.iti.formal.psdbg.parser.Visitor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* Object representing a "closes closeScriptCall(): { Commands}" block in a cases
*/
@Data
@NoArgsConstructor
public
class
ClosesCase
extends
CaseStatement
{
private
boolean
isClosedStmt
=
true
;
/**
* Script that should be executed and shown whether case can be closed
*/
private
CallStatement
closesScript
;
/**
* A close subscript() {bodyscript} expression
*
* @param closesScript the script that is exectued in order to determine whether goal would clos. This proof is pruned afterwards
* @param body the actual script that is then executed when closesscript was successful and pruned
*/
public
ClosesCase
(
CallStatement
closesScript
,
Statements
body
)
{
this
.
body
=
body
;
this
.
closesScript
=
closesScript
;
}
/**
* {@inheritDoc}
*/
@Override
public
<
T
>
T
accept
(
Visitor
<
T
>
visitor
)
{
return
visitor
.
visit
(
this
);
}
/**
* {@inheritDoc}
*/
@Override
public
tryCase
copy
()
{
return
new
tryCase
(
body
.
copy
());
}
}
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/
IsClosable
Case.java
→
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/
try
Case.java
View file @
08f697b5
...
...
@@ -5,14 +5,14 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
/**
* Object representing a "
match isClosable
{ Commands}" block
* Object representing a "
try
{ Commands}" block
in a cases
*/
@Data
@NoArgsConstructor
public
class
IsClosable
Case
extends
CaseStatement
{
public
class
try
Case
extends
CaseStatement
{
private
boolean
isClosedStmt
=
true
;
public
IsClosable
Case
(
Statements
body
)
{
public
try
Case
(
Statements
body
)
{
this
.
body
=
body
;
}
...
...
@@ -28,7 +28,7 @@ public class IsClosableCase extends CaseStatement {
* {@inheritDoc}
*/
@Override
public
IsClosable
Case
copy
()
{
return
new
IsClosable
Case
(
body
.
copy
());
public
try
Case
copy
()
{
return
new
try
Case
(
body
.
copy
());
}
}
lang/src/test/resources/edu/kit/iti/formal/psdbg/parser/scripts/closesAndTrycases.txt
0 → 100644
View file @
08f697b5
script ruRg ()
{ cases
{ case abc :
{ aM:TERM:=not ka&bi;
dsL f5=90;
}
case try :
{ last;
}
case closes body;{
last;
last;
}
}
}
script body()
{
foo;
}
\ No newline at end of file
pom.xml
View file @
08f697b5
...
...
@@ -57,7 +57,7 @@
<module>
rt
</module>
<module>
rt-key
</module>
<module>
ui
</module>
<module>
DockFX
</module>
<module>
lib/
DockFX
</module>
<module>
lint
</module>
<module>
keydeps
</module>
<module>
matcher
</module>
...
...
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/KeyInterpreter.java
View file @
08f697b5
...
...
@@ -11,7 +11,7 @@ import edu.kit.iti.formal.psdbg.interpreter.data.KeyData;
import
edu.kit.iti.formal.psdbg.interpreter.data.State
;
import
edu.kit.iti.formal.psdbg.interpreter.data.VariableAssignment
;
import
edu.kit.iti.formal.psdbg.interpreter.funchdl.CommandLookup
;
import
edu.kit.iti.formal.psdbg.parser.ast.
IsClosable
Case
;
import
edu.kit.iti.formal.psdbg.parser.ast.
try
Case
;
import
edu.kit.iti.formal.psdbg.parser.types.SimpleType
;
import
lombok.Getter
;
import
org.key_project.util.collection.ImmutableList
;
...
...
@@ -43,14 +43,14 @@ public class KeyInterpreter extends Interpreter<KeyData> {
@Override
public
Object
visit
(
IsClosableCase
isClosable
Case
)
{
public
Object
visit
(
tryCase
try
Case
)
{
State
<
KeyData
>
currentStateToMatch
=
peekState
();
State
<
KeyData
>
currentStateToMatchCopy
=
peekState
().
copy
();
//deepcopy
GoalNode
<
KeyData
>
selectedGoalNode
=
currentStateToMatch
.
getSelectedGoalNode
();
GoalNode
<
KeyData
>
selectedGoalCopy
=
currentStateToMatch
.
getSelectedGoalNode
().
deepCopy
();
//deepcopy
enterScope
(
isClosable
Case
);
executeBody
(
isClosable
Case
.
getBody
(),
selectedGoalNode
,
new
VariableAssignment
(
selectedGoalNode
.
getAssignments
()));
enterScope
(
try
Case
);
executeBody
(
try
Case
.
getBody
(),
selectedGoalNode
,
new
VariableAssignment
(
selectedGoalNode
.
getAssignments
()));
State
<
KeyData
>
stateafterIsClosable
=
peekState
();
List
<
GoalNode
<
KeyData
>>
goals
=
stateafterIsClosable
.
getGoals
();
boolean
allClosed
=
true
;
...
...
@@ -70,7 +70,7 @@ public class KeyInterpreter extends Interpreter<KeyData> {
pushState
(
currentStateToMatchCopy
);
}
//check if state is closed
exitScope
(
isClosable
Case
);
exitScope
(
try
Case
);
return
false
;
}
}
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/Interpreter.java
View file @
08f697b5
...
...
@@ -165,10 +165,10 @@ public class Interpreter<T> extends DefaultASTVisitor<Object>
}
@Override
public
Object
visit
(
IsClosableCase
isClosable
Case
)
{
enterScope
(
isClosable
Case
);
public
Object
visit
(
tryCase
try
Case
)
{
enterScope
(
try
Case
);
exitScope
(
isClosable
Case
);
exitScope
(
try
Case
);
return
false
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment