Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
ProofScriptParser
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
24
Issues
24
List
Boards
Labels
Service Desk
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sarah.grebing
ProofScriptParser
Commits
49abb804
Commit
49abb804
authored
Oct 09, 2018
by
Sarah Grebing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bugfix: DerivableCase
parent
e81512f5
Pipeline
#29423
passed with stages
in 2 minutes and 43 seconds
Changes
14
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
134 additions
and
87 deletions
+134
-87
lang/src/main/antlr/edu/kit/iti/formal/psdbg/parser/ScriptLanguage.g4
...n/antlr/edu/kit/iti/formal/psdbg/parser/ScriptLanguage.g4
+4
-5
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ASTTraversal.java
...in/java/edu/kit/iti/formal/psdbg/parser/ASTTraversal.java
+9
-0
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/DefaultASTVisitor.java
...va/edu/kit/iti/formal/psdbg/parser/DefaultASTVisitor.java
+5
-0
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/TransformAst.java
...in/java/edu/kit/iti/formal/psdbg/parser/TransformAst.java
+10
-12
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/Visitor.java
...rc/main/java/edu/kit/iti/formal/psdbg/parser/Visitor.java
+2
-0
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/DerivableCase.java
...va/edu/kit/iti/formal/psdbg/parser/ast/DerivableCase.java
+30
-0
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/MatchExpression.java
.../edu/kit/iti/formal/psdbg/parser/ast/MatchExpression.java
+1
-1
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/KeyInterpreter.java
.../edu/kit/iti/formal/psdbg/interpreter/KeyInterpreter.java
+1
-58
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/data/TermValue.java
.../edu/kit/iti/formal/psdbg/interpreter/data/TermValue.java
+1
-0
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/matcher/KeYMatcher.java
.../kit/iti/formal/psdbg/interpreter/matcher/KeYMatcher.java
+29
-9
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/Interpreter.java
...ava/edu/kit/iti/formal/psdbg/interpreter/Interpreter.java
+31
-1
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/MatcherApi.java
...java/edu/kit/iti/formal/psdbg/interpreter/MatcherApi.java
+3
-0
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/dbg/PseudoMatcher.java
...u/kit/iti/formal/psdbg/interpreter/dbg/PseudoMatcher.java
+7
-0
ui/src/main/resources/edu/kit/iti/formal/psdbg/examples/contraposition/script.kps
...u/kit/iti/formal/psdbg/examples/contraposition/script.kps
+1
-1
No files found.
lang/src/main/antlr/edu/kit/iti/formal/psdbg/parser/ScriptLanguage.g4
View file @
49abb804
...
...
@@ -100,9 +100,7 @@ literals :
</pre>*/
matchPattern
:
MATCH (
derivable=DERIVABLE derivableExpression=expression
| (pattern=expression (USING LBRACKET argList RBRACKET)?)
MATCH ((pattern=expression (USING LBRACKET argList RBRACKET)?)
)
;
...
...
@@ -123,7 +121,8 @@ casesStmt
casesList
: (TRY |
(CASE (expression
| (CLOSES INDENT closesGuard=stmtList DEDENT) ) ) )
|(CLOSES INDENT closesGuard=stmtList DEDENT)
|(derivable=DERIVABLE derivableExpression=expression) ) ))
COLON INDENT? body=stmtList DEDENT?
;
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ASTTraversal.java
View file @
49abb804
...
...
@@ -160,6 +160,7 @@ public interface ASTTraversal<T> extends Visitor<T> {
return
null
;
}
@Override
default
T
visit
(
ForeachStatement
foreach
)
{
foreach
.
getBody
().
accept
(
this
);
...
...
@@ -209,6 +210,14 @@ public interface ASTTraversal<T> extends Visitor<T> {
return
null
;
}
@Override
default
T
visit
(
DerivableCase
derivableCase
){
derivableCase
.
getExpression
().
accept
(
this
);
derivableCase
.
getBody
().
accept
(
this
);
return
null
;
}
@Override
default
T
visit
(
SubstituteExpression
subst
)
{
subst
.
getSub
().
accept
(
this
);
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/DefaultASTVisitor.java
View file @
49abb804
...
...
@@ -92,6 +92,11 @@ public class DefaultASTVisitor<T> implements Visitor<T> {
return
defaultVisit
(
defCase
);
}
@Override
public
T
visit
(
DerivableCase
derivableCase
)
{
return
defaultVisit
(
derivableCase
);
}
@Override
public
T
visit
(
CaseStatement
caseStatement
)
{
return
defaultVisit
(
caseStatement
);
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/TransformAst.java
View file @
49abb804
...
...
@@ -370,17 +370,9 @@ public class TransformAst implements ScriptLanguageVisitor<Object> {
MatchExpression
match
=
new
MatchExpression
();
match
.
setRuleContext
(
ctx
);
if
(
ctx
.
derivable
!=
null
)
{
match
.
setDerivable
(
true
);
Expression
<
ParserRuleContext
>
e
=
(
Expression
<
ParserRuleContext
>)
ctx
.
derivableExpression
.
accept
(
this
);
match
.
setPattern
(
e
);
e
.
setParent
(
match
);
match
.
setDerivableTerm
(
e
);
}
else
{
Expression
<
ParserRuleContext
>
e
=
(
Expression
<
ParserRuleContext
>)
ctx
.
pattern
.
accept
(
this
);
match
.
setPattern
(
e
);
e
.
setParent
(
match
);
}
return
match
;
}
...
...
@@ -417,7 +409,13 @@ public class TransformAst implements ScriptLanguageVisitor<Object> {
Statements
closes
=
(
Statements
)
ctx
.
closesGuard
.
accept
(
this
);
((
ClosesCase
)
cs
).
setClosesGuard
(
closes
);
closes
.
setParent
(
cs
);
}
else
{
}
else
if
(
ctx
.
derivable
!=
null
)
{
cs
=
new
DerivableCase
();
Expression
pattern
=
(
Expression
)
ctx
.
derivableExpression
.
accept
(
this
);
((
DerivableCase
)
cs
).
setExpression
(
pattern
);
pattern
.
setParent
(
cs
);
}
else
{
cs
=
new
GuardedCaseStatement
();
Expression
<
ParserRuleContext
>
guard
=
(
Expression
<
ParserRuleContext
>)
ctx
.
expression
().
accept
(
this
);
((
GuardedCaseStatement
)
cs
).
setGuard
(
guard
);
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/Visitor.java
View file @
49abb804
...
...
@@ -53,6 +53,8 @@ public interface Visitor<T> {
T
visit
(
DefaultCaseStatement
defCase
);
T
visit
(
DerivableCase
derivableCase
);
//T visit(CaseStatement case_);
T
visit
(
CallStatement
call
);
...
...
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/DerivableCase.java
0 → 100644
View file @
49abb804
package
edu.kit.iti.formal.psdbg.parser.ast
;
import
edu.kit.iti.formal.psdbg.parser.Visitor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@NoArgsConstructor
public
class
DerivableCase
extends
CaseStatement
{
private
Expression
expression
;
public
DerivableCase
(
Statements
copy
,
Expression
copy1
)
{
super
(
copy
);
this
.
expression
=
copy1
;
}
@Override
public
<
T
>
T
accept
(
Visitor
<
T
>
visitor
)
{
return
visitor
.
visit
(
this
);
}
@Override
public
CaseStatement
copy
()
{
DerivableCase
dc
=
new
DerivableCase
(
body
.
copy
(),
expression
.
copy
());
dc
.
setRuleContext
(
this
.
getRuleContext
());
return
dc
;
}
}
lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/MatchExpression.java
View file @
49abb804
...
...
@@ -43,7 +43,7 @@ import lombok.Setter;
public
class
MatchExpression
extends
Expression
<
ScriptLanguageParser
.
MatchPatternContext
>
{
//private Signature signature = new Signature();
private
Expression
pattern
;
@Getter
@Setter
@
Deprecated
@
Getter
@Setter
private
boolean
isDerivable
=
false
;
@Deprecated
private
Expression
derivableTerm
;
...
...
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/KeyInterpreter.java
View file @
49abb804
...
...
@@ -20,6 +20,7 @@ import edu.kit.iti.formal.psdbg.parser.types.SimpleType;
import
edu.kit.iti.formal.psdbg.parser.types.TermType
;
import
edu.kit.iti.formal.psdbg.parser.types.TypeFacade
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.Collections
;
import
java.util.List
;
...
...
@@ -30,8 +31,6 @@ import java.util.function.Function;
* @version 1 (28.08.17)
*/
public
class
KeyInterpreter
extends
Interpreter
<
KeyData
>
{
@Getter
private
static
final
BiMap
<
SimpleType
,
VariableAssignments
.
VarType
>
typeConversionBiMap
=
new
ImmutableBiMap
.
Builder
<
SimpleType
,
VariableAssignments
.
VarType
>()
...
...
@@ -148,63 +147,7 @@ public class KeyInterpreter extends Interpreter<KeyData> {
return
eval
;
}
@Override
public
Object
visit
(
GuardedCaseStatement
guardedCaseStatement
)
{
Expression
matchExpression
=
guardedCaseStatement
.
getGuard
();
State
<
KeyData
>
currentStateToMatch
=
peekState
();
GoalNode
<
KeyData
>
selectedGoal
=
currentStateToMatch
.
getSelectedGoalNode
();
assert
currentStateToMatch
.
getGoals
().
contains
(
selectedGoal
);
if
(
matchExpression
.
hasMatchExpression
()){
MatchExpression
me
=
(
MatchExpression
)
matchExpression
;
if
(
me
.
isDerivable
()){
enterScope
(
matchExpression
);
Evaluator
eval
=
new
Evaluator
<>(
selectedGoal
.
getAssignments
(),
selectedGoal
);
eval
.
getEntryListeners
().
addAll
(
getEntryListeners
());
eval
.
getExitListeners
().
addAll
(
getExitListeners
());
Value
eval1
=
eval
.
eval
(
me
.
getPattern
());
Term
term
=
null
;
Services
services
=
selectedGoal
.
getData
().
getProof
().
getServices
();
if
(
eval1
.
getType
()
==
TypeFacade
.
ANY_TERM
){
if
(
eval1
.
getData
()
instanceof
String
){
try
{
term
=
new
TermBuilder
(
services
.
getTermFactory
(),
services
).
parseTerm
(
eval1
.
getData
().
toString
());
}
catch
(
ParserException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
else
{
TermValue
tv
=
(
TermValue
)
eval1
.
getData
();
term
=
tv
.
getTerm
();
}
}
else
{
new
RuntimeException
(
"The parameter for a derivable expression has to be a term. Got "
+
eval1
.
getType
());
}
KeYMatcher
.
isDerivable
(
selectedGoal
.
getData
().
getProof
(),
selectedGoal
,
term
);
exitScope
(
matchExpression
);
}
else
{
return
super
.
visit
(
guardedCaseStatement
);
}
}
// VariableAssignment va = super.evaluateMatchInGoal(matchExpression, selectedGoal);
VariableAssignment
va
=
null
;
try
{
enterScope
(
guardedCaseStatement
);
if
(
va
!=
null
)
{
executeBody
(
guardedCaseStatement
.
getBody
(),
selectedGoal
,
va
);
return
true
;
}
else
{
return
false
;
}
}
finally
{
exitScope
(
guardedCaseStatement
);
}
}
@Override
...
...
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/data/TermValue.java
View file @
49abb804
...
...
@@ -42,6 +42,7 @@ public class TermValue {
}
}
public
TermValue
copy
()
{
TermValue
tv
=
new
TermValue
();
...
...
rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/matcher/KeYMatcher.java
View file @
49abb804
...
...
@@ -3,8 +3,10 @@ package edu.kit.iti.formal.psdbg.interpreter.matcher;
import
de.uka.ilkd.key.java.Services
;
import
de.uka.ilkd.key.logic.Name
;
import
de.uka.ilkd.key.logic.Term
;
import
de.uka.ilkd.key.logic.TermBuilder
;
import
de.uka.ilkd.key.logic.op.LogicVariable
;
import
de.uka.ilkd.key.logic.op.SchemaVariable
;
import
de.uka.ilkd.key.parser.ParserException
;
import
de.uka.ilkd.key.pp.LogicPrinter
;
import
de.uka.ilkd.key.proof.ApplyStrategy
;
import
de.uka.ilkd.key.proof.Goal
;
...
...
@@ -14,14 +16,12 @@ import de.uka.ilkd.key.rule.NoPosTacletApp;
import
de.uka.ilkd.key.rule.Taclet
;
import
de.uka.ilkd.key.rule.TacletApp
;
import
edu.kit.iti.formal.psdbg.interpreter.MatcherApi
;
import
edu.kit.iti.formal.psdbg.interpreter.data.GoalNode
;
import
edu.kit.iti.formal.psdbg.interpreter.data.KeyData
;
import
edu.kit.iti.formal.psdbg.interpreter.data.SortType
;
import
edu.kit.iti.formal.psdbg.interpreter.data.VariableAssignment
;
import
edu.kit.iti.formal.psdbg.interpreter.data.*
;
import
edu.kit.iti.formal.psdbg.parser.ast.Signature
;
import
edu.kit.iti.formal.psdbg.parser.data.Value
;
import
edu.kit.iti.formal.psdbg.parser.types.SimpleType
;
import
edu.kit.iti.formal.psdbg.parser.types.TermType
;
import
edu.kit.iti.formal.psdbg.parser.types.TypeFacade
;
import
lombok.Getter
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
...
...
@@ -54,12 +54,25 @@ public class KeYMatcher implements MatcherApi<KeyData> {
}
/**
* @param proof
* @param kd
* @param term
*
* @return null if the term is not derivable or the new state
*/
public
static
GoalNode
<
KeyData
>
isDerivable
(
Proof
proof
,
GoalNode
<
KeyData
>
kd
,
Term
term
)
{
public
GoalNode
<
KeyData
>
isDerivable
(
GoalNode
<
KeyData
>
kd
,
Value
pattern
)
{
Proof
proof
=
kd
.
getData
().
getProof
();
TermValue
tv
=
(
TermValue
)
pattern
.
getData
();
Term
term
=
tv
.
getTerm
();
if
(
term
==
null
)
{
Services
services
=
kd
.
getData
().
getProof
().
getServices
();
try
{
term
=
new
TermBuilder
(
services
.
getTermFactory
(),
services
).
parseTerm
(
tv
.
getTermRepr
());
}
catch
(
ParserException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
Taclet
cut
=
proof
.
getEnv
().
getInitConfigForEnvironment
().
lookupActiveTaclet
(
CUT_TACLET_NAME
);
TacletApp
app
=
NoPosTacletApp
.
createNoPosTacletApp
(
cut
);
SchemaVariable
sv
=
(
SchemaVariable
)
app
.
uninstantiatedVars
().
iterator
().
next
();
...
...
@@ -82,7 +95,14 @@ public class KeYMatcher implements MatcherApi<KeyData> {
boolean
isDerivable
=
proof
.
getSubtreeGoals
(
toShow
.
node
()).
size
()
==
0
;
if
(
isDerivable
)
{
KeyData
kdataNew
=
new
KeyData
(
kd
.
getData
(),
goalList
.
head
());
//find the open goal node
Goal
toSet
=
null
;
if
(
goalList
.
head
().
node
().
isClosed
()){
toSet
=
goalList
.
tail
().
head
();
}
else
{
toSet
=
goalList
.
head
();
}
KeyData
kdataNew
=
new
KeyData
(
kd
.
getData
(),
toSet
);
GoalNode
<
KeyData
>
newGoalNode
=
new
GoalNode
<
KeyData
>(
kd
,
kdataNew
,
kdataNew
.
isClosedNode
());
return
newGoalNode
;
}
else
{
...
...
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/Interpreter.java
View file @
49abb804
...
...
@@ -12,7 +12,9 @@ import edu.kit.iti.formal.psdbg.parser.Visitor;
import
edu.kit.iti.formal.psdbg.parser.ast.*
;
import
edu.kit.iti.formal.psdbg.parser.data.Value
;
import
edu.kit.iti.formal.psdbg.parser.types.SimpleType
;
import
edu.kit.iti.formal.psdbg.parser.types.TermType
;
import
edu.kit.iti.formal.psdbg.parser.types.Type
;
import
edu.kit.iti.formal.psdbg.parser.types.TypeFacade
;
import
lombok.Getter
;
import
lombok.Setter
;
import
org.antlr.v4.runtime.ParserRuleContext
;
...
...
@@ -209,6 +211,35 @@ public class Interpreter<T> extends DefaultASTVisitor<Object>
return
null
;
}
@Override
public
Object
visit
(
DerivableCase
derivableCase
)
{
Expression
pattern
=
derivableCase
.
getExpression
();
State
<
T
>
currentStateToMatch
=
peekState
();
GoalNode
<
T
>
selectedGoal
=
currentStateToMatch
.
getSelectedGoalNode
();
assert
currentStateToMatch
.
getGoals
().
contains
(
selectedGoal
);
Value
v
=
evaluate
(
pattern
);
if
(
v
.
getType
()
==
TypeFacade
.
ANY_TERM
){
GoalNode
<
T
>
newGoalNode
=
matcherApi
.
isDerivable
(
selectedGoal
,
v
);
try
{
enterScope
(
derivableCase
);
if
(
newGoalNode
!=
null
)
{
currentStateToMatch
.
getGoals
().
remove
(
selectedGoal
);
currentStateToMatch
.
getGoals
().
add
(
newGoalNode
);
currentStateToMatch
.
setSelectedGoalNode
(
newGoalNode
);
executeBody
(
derivableCase
.
getBody
(),
newGoalNode
,
new
VariableAssignment
());
return
true
;
}
else
{
return
false
;
}
}
finally
{
exitScope
(
derivableCase
);
}
}
else
{
throw
new
RuntimeException
(
"A derivable expression must contain a term. Received a"
+
v
.
getType
());
}
}
/**
* @param casesStatement
* @return
...
...
@@ -303,7 +334,6 @@ public class Interpreter<T> extends DefaultASTVisitor<Object>
GoalNode
<
T
>
selectedGoal
=
currentStateToMatch
.
getSelectedGoalNode
();
assert
currentStateToMatch
.
getGoals
().
contains
(
selectedGoal
);
VariableAssignment
va
=
evaluateMatchInGoal
(
matchExpression
,
selectedGoal
);
try
{
enterScope
(
guardedCaseStatement
);
if
(
va
!=
null
)
{
...
...
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/MatcherApi.java
View file @
49abb804
...
...
@@ -3,6 +3,7 @@ package edu.kit.iti.formal.psdbg.interpreter;
import
edu.kit.iti.formal.psdbg.interpreter.data.GoalNode
;
import
edu.kit.iti.formal.psdbg.interpreter.data.VariableAssignment
;
import
edu.kit.iti.formal.psdbg.parser.ast.Signature
;
import
edu.kit.iti.formal.psdbg.parser.data.Value
;
import
java.util.List
;
...
...
@@ -27,4 +28,6 @@ public interface MatcherApi<T> {
*/
List
<
VariableAssignment
>
matchSeq
(
GoalNode
<
T
>
currentState
,
String
pattern
);
GoalNode
<
T
>
isDerivable
(
GoalNode
<
T
>
currentState
,
Value
v
);
}
rt/src/main/java/edu/kit/iti/formal/psdbg/interpreter/dbg/PseudoMatcher.java
View file @
49abb804
...
...
@@ -49,6 +49,13 @@ public class PseudoMatcher implements MatcherApi<String> {
}
return
Collections
.
singletonList
(
va
);
}
@Override
public
GoalNode
<
String
>
isDerivable
(
GoalNode
<
String
>
currentState
,
Value
v
)
{
return
null
;
}
}
\ No newline at end of file
ui/src/main/resources/edu/kit/iti/formal/psdbg/examples/contraposition/script.kps
View file @
49abb804
...
...
@@ -7,7 +7,7 @@ script full(){
impRight;
impLeft;
cases {
case
match
derivable `p`:
case derivable `p`:
}
}
...
...
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