aboutsummaryrefslogtreecommitdiff
path: root/syntax
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-05-26 13:02:00 +0200
committerJonas Smedegaard <dr@jones.dk>2025-05-26 13:02:00 +0200
commita3eb7e16a727849c58cbabe3b1b9ef64b6f740f6 (patch)
treeb173b77fcbd7355d409df8a9cfc1362518569c75 /syntax
parentcc6f0bb498635e85fa7938d34051af1e6ec0df37 (diff)
restructure PEG for simpler adding SemWord
Diffstat (limited to 'syntax')
-rwxr-xr-xsyntax/AnnotatedWords.py2
-rwxr-xr-xsyntax/Attribute.py (renamed from syntax/SemWords.py)25
-rwxr-xr-xsyntax/Class.py13
-rwxr-xr-xsyntax/Identifier.py13
-rwxr-xr-xsyntax/KeyWord.py16
-rwxr-xr-xsyntax/KeyWordX.py17
-rwxr-xr-xsyntax/KeyWords.py (renamed from syntax/AnnotatedWordsX.py)15
-rw-r--r--syntax/def.peg12
8 files changed, 88 insertions, 25 deletions
diff --git a/syntax/AnnotatedWords.py b/syntax/AnnotatedWords.py
index 729411b..3e565e6 100755
--- a/syntax/AnnotatedWords.py
+++ b/syntax/AnnotatedWords.py
@@ -10,7 +10,7 @@ Diagram(
NonTerminal("Words"),
"]",
"{",
- NonTerminal('![{}] PlainWords'),
+ NonTerminal('KeyWords'),
"}",
type="complex"
).writeStandalone(sys.stdout.write)
diff --git a/syntax/SemWords.py b/syntax/Attribute.py
index 83867ef..c899252 100755
--- a/syntax/SemWords.py
+++ b/syntax/Attribute.py
@@ -6,17 +6,18 @@
from railroad import *
Diagram(
- Group(Sequence(
- NonTerminal("SemWord"),
- Choice(0,
- OneOrMore(
- Sequence(
- NonTerminal("_"),
- NonTerminal("SemWord")
- )
- ),
- Skip()
- )
- )),
+ "[[:alpha:]]",
+ "[[:alnum:]]*",
+ NonTerminal("_?"),
+ "=",
+ NonTerminal("_?"),
+ Choice(0,
+ Sequence(
+ '"',
+ "[[:alnum:]]*",
+ '"',
+ ),
+ "[[:alnum:]]*"
+ ),
type="complex"
).writeStandalone(sys.stdout.write)
diff --git a/syntax/Class.py b/syntax/Class.py
new file mode 100755
index 0000000..2c16d93
--- /dev/null
+++ b/syntax/Class.py
@@ -0,0 +1,13 @@
+#!/usr/bin/python3
+
+# Copyright 2025, Jonas Smedegaard <dr@jones.dk>
+# SPDX-License-Identifier: GPL-3+
+
+from railroad import *
+
+Diagram(
+ "'.'",
+ "[[:alpha:]]",
+ "[[:alnum:]]*",
+ type="complex"
+).writeStandalone(sys.stdout.write)
diff --git a/syntax/Identifier.py b/syntax/Identifier.py
new file mode 100755
index 0000000..2f1ff5f
--- /dev/null
+++ b/syntax/Identifier.py
@@ -0,0 +1,13 @@
+#!/usr/bin/python3
+
+# Copyright 2025, Jonas Smedegaard <dr@jones.dk>
+# SPDX-License-Identifier: GPL-3+
+
+from railroad import *
+
+Diagram(
+ "'#'",
+ "[[:alpha:]]",
+ "[[:alnum:]]*",
+ type="complex"
+).writeStandalone(sys.stdout.write)
diff --git a/syntax/KeyWord.py b/syntax/KeyWord.py
new file mode 100755
index 0000000..4c4ef45
--- /dev/null
+++ b/syntax/KeyWord.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python3
+
+# Copyright 2025, Jonas Smedegaard <dr@jones.dk>
+# SPDX-License-Identifier: GPL-3+
+
+from railroad import *
+
+Diagram(
+ Choice(0,
+ NonTerminal("Identifier"),
+ NonTerminal("Class"),
+ NonTerminal("Attribute"),
+ "-"
+ ),
+ type="complex"
+).writeStandalone(sys.stdout.write)
diff --git a/syntax/KeyWordX.py b/syntax/KeyWordX.py
new file mode 100755
index 0000000..a0280f9
--- /dev/null
+++ b/syntax/KeyWordX.py
@@ -0,0 +1,17 @@
+#!/usr/bin/python3
+
+# Copyright 2025, Jonas Smedegaard <dr@jones.dk>
+# SPDX-License-Identifier: GPL-3+
+
+from railroad import *
+
+Diagram(
+ Choice(0,
+ Group(NonTerminal("SemWord")),
+ NonTerminal("Identifier"),
+ NonTerminal("Class"),
+ NonTerminal("Attribute"),
+ "-"
+ ),
+ type="complex"
+).writeStandalone(sys.stdout.write)
diff --git a/syntax/AnnotatedWordsX.py b/syntax/KeyWords.py
index cd2b530..760f057 100755
--- a/syntax/AnnotatedWordsX.py
+++ b/syntax/KeyWords.py
@@ -6,16 +6,15 @@
from railroad import *
Diagram(
- "[",
- NonTerminal("Words"),
- "]",
- "{",
+ NonTerminal("KeyWord"),
Choice(0,
- Group(
- NonTerminal('SemWords'),
+ OneOrMore(
+ Sequence(
+ NonTerminal("_"),
+ NonTerminal("KeyWord")
+ )
),
- NonTerminal('![{}] PlainWords'),
+ Skip()
),
- "}",
type="complex"
).writeStandalone(sys.stdout.write)
diff --git a/syntax/def.peg b/syntax/def.peg
index 7696a0d..0c99c80 100644
--- a/syntax/def.peg
+++ b/syntax/def.peg
@@ -28,12 +28,18 @@ StyledWords <- '**' Words '**'
LinkedWords <- '[' Words ']' '(' ((Uri _)? LinkTitle / Uri) ')'
/ '[' Words ']' LinkLabel
/ LinkLabel
-AnnotatedWords <- '[' Words ']' '{' ![{}] PlainWords '}'
+AnnotatedWords <- '[' Words ']' '{' KeyWords '}'
LinkLabel <- '[' _? ![\[\]] PlainWords _? ']'
LinkTitle <- '"' _? !'"' _? PlainWords _? '"'
/ "'" _? !"'" PlainWords _? "'"
/ "(" _? ![()] PlainWords _? ")"
+KeyWords <- KeyWord (_ KeyWord)*
PlainWords <- PRINTABLES (_ PRINTABLES)*
+KeyWord <- Identifier / Class / Attribute / '-'
+Identifier <- '#' [[:alpha:]] [[:alnum:]]*
+Class <- '.' [[:alpha:]] [[:alnum:]]*
+Attribute <- [[:alpha:]] [[:alnum:]]* SPACE* = SPACE*
+ ('"' [[:alnum:]]+ '"' / [[:alnum:]]+)
Uri <- '<' ![<>] PRINTABLES? '>'
/ ![<>] PRINTABLES
HardBreak <- SPACE SPACE+ NEWLINE
@@ -55,9 +61,7 @@ BlockX <- LinkDefinition
/ List
/ Paragraph
PrefixDefinition <- '{' CuriePrefix '}' ':' _? SemWord NEWLINE
-AnnotatedWordsX <- '[' Words ']'
- ('{' (SemWords / ![{}] PlainWords) '}')
-SemWords <- SemWord (_ SemWord)*
+KeyWordX <- SemWord / Identifier / Class / Attribute / '-'
SemWord <- SEMPREFIX '<' ![<>] PRINTABLES '>'
/ SEMPREFIX Curie
SEMPREFIX <- [.=]