11import ai.hypergraph.kaliningraph.parsing.*
22
33object Grammars {
4- val sss = """ START -> b | START | START START | START START START"""
5- .parseCFG().noNonterminalStubs
4+ val sss by lazy {
5+ """ START -> b | START | START START | START START START"""
6+ .parseCFG().noNonterminalStubs
7+ }
68
7- val ifThen = """
9+ val ifThen by lazy {
10+ """
811 START -> X
912 X -> I | F | P | Q
1013 P -> I O I | P O I
@@ -18,33 +21,34 @@ object Grammars {
1821 BO -> and | or | xor | nand
1922 N -> !
2023 """ .parseCFG().noNonterminalStubs
24+ }
2125
22- val toyArith = """
26+ val toyArith by lazy { """
2327 S -> S + S | S * S | S - S | S / S | ( S ) | - S
2428 S -> 0 | 1 | 2 | 3 | 4
2529 S -> X | Y | Z
26- """ .parseCFG().noNonterminalStubs
30+ """ .parseCFG().noNonterminalStubs }
2731
28- val dyckUnambig = """ S -> ( S ) S | ( S ) | ( ) S | ( )""" .parseCFG().noEpsilonOrNonterminalStubs
29- val dyck = """ S -> ( S ) | ( ) | S S""" .parseCFG().noEpsilonOrNonterminalStubs
32+ val dyckUnambig by lazy { """ S -> ( S ) S | ( S ) | ( ) S | ( )""" .parseCFG().noEpsilonOrNonterminalStubs }
33+ val dyck by lazy { """ S -> ( S ) | ( ) | S S""" .parseCFG().noEpsilonOrNonterminalStubs }
3034
31- val dyckEmbedded = """
35+ val dyckEmbedded by lazy { """
3236 START -> ( ) | ( START ) | START START
3337 START -> START + START | START * START
3438 START -> 1
35- """ .parseCFG().noNonterminalStubs
39+ """ .parseCFG().noNonterminalStubs}
3640
37- val deadSimple = """ S -> ( ) | ( S )""" .parseCFG().noEpsilonOrNonterminalStubs
38- val dsNorm = """
41+ val deadSimple by lazy { """ S -> ( ) | ( S )""" .parseCFG().noEpsilonOrNonterminalStubs }
42+ val dsNorm by lazy { """
3943 START -> START START
4044 START -> A B
4145 START -> A C
4246 A -> (
4347 B -> )
4448 C -> START B
45- """ .parseCFG().noEpsilonOrNonterminalStubs
49+ """ .parseCFG().noEpsilonOrNonterminalStubs }
4650
47- val ocamlCFG = """
51+ val ocamlCFG by lazy { """
4852 S -> X
4953 X -> A | V | ( X , X ) | X X | ( X )
5054 A -> FUN | F | LI | M | L
@@ -69,9 +73,9 @@ object Grammars {
6973 VO -> = | < | `||` | `&&`
7074 I -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
7175 B -> true | false
72- """ .parseCFG().noNonterminalStubs
76+ """ .parseCFG().noNonterminalStubs }
7377
74- val coarsenedPythonCFG = """
78+ val coarsenedPythonCFG by lazy { """
7579 S -> w | S ( S ) | ( ) | S = S | S . S | S S | ( S ) | [ S ] | { S } | : | * S | [ ]
7680 S -> S , S | S ; S | S : S
7781 S -> S IOP S | S BOP S
@@ -86,9 +90,9 @@ object Grammars {
8690 S -> if S | if S else S | return S
8791 S -> not S | S or S
8892 S -> lambda w : S | lambda w , w : S | lambda w , w , w : S | lambda w , w , w , w : S
89- """ .parseCFG().noNonterminalStubs
93+ """ .parseCFG().noNonterminalStubs }
9094
91- val tinyC: CFG = """
95+ val tinyC: CFG by lazy { """
9296 START -> program
9397 program -> statement
9498 statement -> if paren_expr statement
@@ -103,10 +107,10 @@ object Grammars {
103107 test -> sum | sum < sum
104108 sum -> term | sum + term | sum - term
105109 term -> id | int | paren_expr
106- """ .parseCFG().freeze()
110+ """ .parseCFG().freeze() }
107111
108112// https://aclanthology.org/2020.conll-1.41.pdf#page=12
109- val hardestCFL: CFG = """
113+ val hardestCFL: CFG by lazy { """
110114 S' -> R ${' $' } Q S L ;
111115 L -> L' , U
112116 L' -> , V L'
@@ -131,10 +135,10 @@ object Grammars {
131135 T -> [ Q S Q ]
132136 T -> ( Q )
133137 T -> [ Q ]
134- """ .trimIndent().parseCFG().noNonterminalStubs
138+ """ .trimIndent().parseCFG().noNonterminalStubs }
135139
136140 val shortS2PParikhMap by lazy { ParikhMap (seq2parsePythonCFG, 20 ) }
137- val seq2parsePythonCFGStr = """
141+ val seq2parsePythonCFGStr by lazy { """
138142 START -> Stmts_Or_Newlines
139143 Stmts_Or_Newlines -> Stmt_Or_Newline | Stmt_Or_Newline Stmts_Or_Newlines
140144 Stmt_Or_Newline -> Stmt | Newline
@@ -325,12 +329,12 @@ object Grammars {
325329
326330 Yield_Expr -> Yield_Keyword | Yield_Keyword Yield_Arg
327331 Yield_Arg -> From_Keyword Test | Testlist_Endcomma
328- """
332+ """ }
329333
330- val seq2parsePythonCFG: CFG = seq2parsePythonCFGStr.parseCFG().noNonterminalStubs
331- val seq2parsePythonVanillaCFG: CFG = seq2parsePythonCFGStr.parseCFG().noEpsilonOrNonterminalStubs
334+ val seq2parsePythonCFG: CFG by lazy { seq2parsePythonCFGStr.parseCFG().noNonterminalStubs }
335+ val seq2parsePythonVanillaCFG: CFG by lazy { seq2parsePythonCFGStr.parseCFG().noEpsilonOrNonterminalStubs }
332336
333- val checkedArithCFG = """
337+ val checkedArithCFG by lazy { """
334338 START -> S
335339S -> S1 = S1
336340S -> S2 = S2
@@ -381,13 +385,13 @@ P6 -> P6 / P1
381385P7 -> P7 / P1
382386P8 -> P8 / P1
383387P9 -> P9 / P1
384- """ .parseCFG().noNonterminalStubs.freeze()
388+ """ .parseCFG().noNonterminalStubs.freeze() }
385389
386- val arith = """
390+ val arith by lazy { """
387391 O -> + | * | - | /
388392 S -> S O S | ( S )
389393 S -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
390- """ .parseCFG()
394+ """ .parseCFG() }
391395
392396 private fun Tree.middle (): Σᐩ? = children.drop(1 ).firstOrNull()?.terminal
393397 fun Tree.evalArith (): Int = when {
0 commit comments