From de0ea1d86b98287d688bdef42da6d8905e4e9ce6 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 30 Jun 2024 18:10:01 +0200 Subject: refactor(language): computed constraint symbol --- .../language/src/main/java/tools/refinery/language/Problem.xtext | 2 +- .../tools/refinery/language/parser/antlr/ProblemTokenSource.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'subprojects/language/src/main/java/tools') diff --git a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext index d6c605cc..5adc50eb 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext +++ b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext @@ -199,8 +199,8 @@ CastExprBody returns Expr: Atom | VariableOrNodeExpr | Constant | "(" Expr ")"; Atom: - computed?="computed"? relation=[Relation|QualifiedName] + computed?="<-"? transitiveClosure?=TRANSITIVE_CLOSURE? "(" (arguments+=Expr ("," arguments+=Expr)*)? ")"; diff --git a/subprojects/language/src/main/java/tools/refinery/language/parser/antlr/ProblemTokenSource.java b/subprojects/language/src/main/java/tools/refinery/language/parser/antlr/ProblemTokenSource.java index 487e4ceb..e483517a 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/parser/antlr/ProblemTokenSource.java +++ b/subprojects/language/src/main/java/tools/refinery/language/parser/antlr/ProblemTokenSource.java @@ -28,6 +28,8 @@ public class ProblemTokenSource implements TokenSource { private boolean seenId; + private boolean seenComputed; + private boolean lastVisible; public ProblemTokenSource(TokenSource delegate) { @@ -57,10 +59,13 @@ public class ProblemTokenSource implements TokenSource { } else if (lastVisible && isQualifiedNameSeparator(token)) { token.setType(InternalProblemParser.RULE_QUALIFIED_NAME_SEPARATOR); } + } else if (seenComputed && isPlusOrTransitiveClosure(token) && peekForTransitiveClosure()) { + token.setType(InternalProblemParser.RULE_TRANSITIVE_CLOSURE); } lastVisible = isVisibleToken(token); if (lastVisible) { seenId = isIdentifier(token); + seenComputed = isComputed(token); } return token; } @@ -82,6 +87,10 @@ public class ProblemTokenSource implements TokenSource { return token.getType() == InternalProblemParser.ColonColon; } + protected boolean isComputed(Token token) { + return token.getType() == InternalProblemParser.LessThanSignHyphenMinus; + } + protected boolean isVisibleToken(Token token) { int tokenId = token.getType(); return tokenId != InternalProblemParser.RULE_WS && tokenId != InternalProblemParser.RULE_SL_COMMENT && -- cgit v1.2.3-70-g09d2