Skip to content

Commit 8a5a394

Browse files
committed
support multi head and #if grammar
1 parent c7d2782 commit 8a5a394

File tree

6 files changed

+22
-14
lines changed

6 files changed

+22
-14
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ apply {
2727

2828
repositories {
2929
mavenCentral()
30-
maven("https://dl.bintray.com/jetbrains/markdown")
30+
//maven("https://dl.bintray.com/jetbrains/markdown")
3131
maven("https://plugins.gradle.org/m2/")
3232
}
3333

src/main/grammars/datalog.bnf

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
LINE_BREAK = 'regexp:\r|\n|\r\n'
2020

2121
INCLUDE_DIRECTIVE = "#include"
22+
IF_DIRECTIVE = "#if"
2223
IFDEF_DIRECTIVE = "#ifdef"
2324
IFNDEF_DIRECTIVE = "#ifndef"
2425
ELIF_DIRECTIVE = "#elif"
@@ -156,7 +157,7 @@ private ProgramElement_first ::= (
156157
".input" | ".output" | ".printsize" |
157158
".pragma" |
158159
".symbol_type" | ".number_type" |
159-
DEFINE_DIRECTIVE | IFDEF_DIRECTIVE | IFNDEF_DIRECTIVE | ENDIF_DIRECTIVE | INCLUDE_DIRECTIVE |
160+
DEFINE_DIRECTIVE | IF_DIRECTIVE | ELSE_DIRECTIVE | IFDEF_DIRECTIVE | IFNDEF_DIRECTIVE | ENDIF_DIRECTIVE | INCLUDE_DIRECTIVE |
160161
IDENTIFIER)
161162

162163

@@ -180,8 +181,10 @@ ComponentTyped ::= AnyRef ("<"TypeReference ("," TypeReference)*">")?
180181
///////////////////////////////////////////////////////////////////////////////////////////////////
181182
// Preprocessor
182183
///////////////////////////////////////////////////////////////////////////////////////////////////
183-
Preprocessor ::= (IFDEF_DIRECTIVE AnyRef)
184-
| (IFNDEF_DIRECTIVE AnyRef)
184+
Preprocessor ::= (IF_DIRECTIVE IDENTIFIER ("<" | "==" | ">") Constant)
185+
| ELSE_DIRECTIVE
186+
| (IFDEF_DIRECTIVE IDENTIFIER)
187+
| (IFNDEF_DIRECTIVE IDENTIFIER)
185188
| ENDIF_DIRECTIVE
186189
| Include
187190
| (MacroDecl (LINE_BREAK | <<eof>>))
@@ -284,7 +287,7 @@ Clause ::= ClauseHead ":-" ClauseBody "." {
284287

285288
private Clause_recover ::= !("}" | ProgramElement_first)
286289

287-
ClauseHead ::= Atom
290+
ClauseHead ::= Atom ("," Atom)*
288291
ClauseBody ::= Predicate {pin=1 recoverWhile=ClauseBody_recover}
289292

290293
private ClauseBody_recover ::= !(ProgramElement_first | ".")

src/main/grammars/datalog.flex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ MACRO_CONTINUATION = \\[ \t\f]*{LINE_BREAK}
5656
{WHITE_SPACE} { return WHITE_SPACE; }
5757

5858
"#include" { return INCLUDE_DIRECTIVE; }
59+
"#if" {return IF_DIRECTIVE; }
5960
"#ifdef" { return IFDEF_DIRECTIVE; }
6061
"#ifndef" { return IFNDEF_DIRECTIVE; }
6162
"#elif" { return ELIF_DIRECTIVE; }

src/main/kotlin/com/lfrobeen/datalog/ide/folding/DatalogFoldingBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class DatalogFoldingBuilder : FoldingBuilderEx() {
4444

4545
is DatalogStatement ->
4646
return node.fact?.atom?.anyReference?.text?.let { "$it(...)." }
47-
?: node.clause?.clauseHead?.atom?.anyReference?.text?.let { "$it(...) :- (...)." }
47+
// ?: node.clause?.clauseHead?.atomList?.anyReference?.text?.let { "$it(...) :- (...)." }
4848
?: "..."
4949
}
5050

src/main/kotlin/com/lfrobeen/datalog/ide/highlight/DatalogSyntaxHighlighter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class DatalogSyntaxHighlighter : SyntaxHighlighterBase() {
3737
// IDENTIFIER -> DatalogColors.IDENTIFIER
3838

3939
DEFINE_DIRECTIVE, INCLUDE_DIRECTIVE,
40-
IFDEF_DIRECTIVE, IFNDEF_DIRECTIVE, ENDIF_DIRECTIVE ->
40+
IF_DIRECTIVE, ELSE_DIRECTIVE, IFDEF_DIRECTIVE, IFNDEF_DIRECTIVE, ENDIF_DIRECTIVE ->
4141
DatalogColors.PREPROCESSOR
4242

4343

src/main/kotlin/com/lfrobeen/datalog/ide/lineMarkers/DatalogRuleToRelationLineMarkerProvider.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@ class DatalogRuleToRelationLineMarkerProvider : RelatedItemLineMarkerProvider()
1616
if (element !is DatalogClause)
1717
return
1818

19-
val relationRef = element.clauseHead.atom.anyReference.reference
20-
val relation = relationRef?.resolve() as? DatalogRelDeclImpl ?: return
19+
val atoms = element.clauseHead.atomList
20+
atoms.forEach {
21+
val relationRef = it.anyReference.reference
22+
val relation = relationRef?.resolve() as? DatalogRelDeclImpl ?: return
2123

22-
val builder = NavigationGutterIconBuilder
23-
.create(AllIcons.Gutter.ImplementingMethod)
24-
.setTargets(listOf(relation))
25-
.setTooltipText("Rule for relation ${relation.name}")
24+
val builder = NavigationGutterIconBuilder
25+
.create(AllIcons.Gutter.ImplementingMethod)
26+
.setTargets(listOf(relation))
27+
.setTooltipText("Rule for relation ${relation.name}")
28+
29+
result.add(builder.createLineMarkerInfo(element))
30+
}
2631

27-
result.add(builder.createLineMarkerInfo(element))
2832
}
2933
}

0 commit comments

Comments
 (0)