diff options
| author | Jonas Smedegaard <dr@jones.dk> | 2025-05-26 13:02:00 +0200 |
|---|---|---|
| committer | Jonas Smedegaard <dr@jones.dk> | 2025-05-26 13:02:00 +0200 |
| commit | a3eb7e16a727849c58cbabe3b1b9ef64b6f740f6 (patch) | |
| tree | b173b77fcbd7355d409df8a9cfc1362518569c75 /syntax | |
| parent | cc6f0bb498635e85fa7938d34051af1e6ec0df37 (diff) | |
restructure PEG for simpler adding SemWord
Diffstat (limited to 'syntax')
| -rwxr-xr-x | syntax/AnnotatedWords.py | 2 | ||||
| -rwxr-xr-x | syntax/Attribute.py (renamed from syntax/SemWords.py) | 25 | ||||
| -rwxr-xr-x | syntax/Class.py | 13 | ||||
| -rwxr-xr-x | syntax/Identifier.py | 13 | ||||
| -rwxr-xr-x | syntax/KeyWord.py | 16 | ||||
| -rwxr-xr-x | syntax/KeyWordX.py | 17 | ||||
| -rwxr-xr-x | syntax/KeyWords.py (renamed from syntax/AnnotatedWordsX.py) | 15 | ||||
| -rw-r--r-- | syntax/def.peg | 12 |
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 <- [.=] |
