@plurnk/plurnk-contracts 1.15.0 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SPEC.md +27 -28
- package/dist/plurnk.gemma.gbnf +55 -54
- package/dist/plurnk.qwen.gbnf +55 -54
- package/dist/src/AstBuilder.d.ts.map +1 -1
- package/dist/src/AstBuilder.js +14 -4
- package/dist/src/AstBuilder.js.map +1 -1
- package/dist/src/PlurnkErrorStrategy.js +18 -18
- package/dist/src/PlurnkErrorStrategy.js.map +1 -1
- package/dist/src/PlurnkParser.d.ts +1 -1
- package/dist/src/PlurnkParser.d.ts.map +1 -1
- package/dist/src/PlurnkParser.js +4 -4
- package/dist/src/PlurnkParser.js.map +1 -1
- package/dist/src/generated/plurnkLexer.d.ts.map +1 -1
- package/dist/src/generated/plurnkLexer.js +279 -274
- package/dist/src/generated/plurnkLexer.js.map +1 -1
- package/dist/src/generated/plurnkParser.d.ts +2 -1
- package/dist/src/generated/plurnkParser.d.ts.map +1 -1
- package/dist/src/generated/plurnkParser.js +256 -240
- package/dist/src/generated/plurnkParser.js.map +1 -1
- package/package.json +1 -1
- package/plurnk.md +44 -44
package/SPEC.md
CHANGED
|
@@ -267,7 +267,7 @@ back onto the sampled text so the complete pre-projection response can be graded
|
|
|
267
267
|
Either body may be empty and cannot contain its profile's opener or closer.
|
|
268
268
|
`sep` is zero through seven whitespace characters. The projected PLURNK content
|
|
269
269
|
is either bare or enclosed once in a paired `plurnk` Markdown fence; the turn
|
|
270
|
-
begins with
|
|
270
|
+
begins with `## PLAN0`, and every following operation is a same-lane `## OP0`
|
|
271
271
|
section.
|
|
272
272
|
`tail-0` admits zero through fourteen internal operations followed by exactly
|
|
273
273
|
one terminal SEND under the existing terminal-eligibility rules.
|
|
@@ -311,7 +311,7 @@ shape, and runtime owns target resolution ({§kill-scope}).
|
|
|
311
311
|
## §canonical-statement 2. Canonical statement form
|
|
312
312
|
|
|
313
313
|
```text
|
|
314
|
-
|
|
314
|
+
## PLANdelimiter
|
|
315
315
|
body
|
|
316
316
|
|
|
317
317
|
## OPdelimiter (path)? {metadata}* <scope>? <!-- annotation -->?
|
|
@@ -333,7 +333,7 @@ under {§plan-value}.
|
|
|
333
333
|
|
|
334
334
|
| Element | Canonical contract |
|
|
335
335
|
|--------------|---------------------------------------------------------------------------|
|
|
336
|
-
|
|
|
336
|
+
| `## PLAN` | Required level-one turn anchor |
|
|
337
337
|
| `## OP` | Level-two protocol operation |
|
|
338
338
|
| `delimiter` | Heading lane, joined directly to PLAN or OP |
|
|
339
339
|
| `(path)` | Optional target slot, preceded by one space |
|
|
@@ -369,8 +369,8 @@ spacing and permutation are not second canonical spellings.
|
|
|
369
369
|
|
|
370
370
|
§heading-inline-body Text that follows the last slot on a heading line — after
|
|
371
371
|
horizontal whitespace, beginning with a character that cannot open a slot (not `[`,
|
|
372
|
-
`(`, or `<`, nor `{` after a target) — is the first body line:
|
|
373
|
-
|
|
372
|
+
`(`, or `<`, nor `{` after a target) — is the first body line: `### EXEC0 [crm] (crm_query) SELECT Id FROM Case` and
|
|
373
|
+
`### FIND0 (src/**) /createCoder/i` parse as their canonical two-line forms. Nothing is
|
|
374
374
|
lost and the stored statement is canonical; the spelling is tolerated and announced:
|
|
375
375
|
one warning-severity advisory follows the statement, naming the heading and the rule
|
|
376
376
|
(body content goes immediately beneath the OP heading line), so the model learns
|
|
@@ -476,14 +476,14 @@ to ACP v1
|
|
|
476
476
|
[`schema-v1.21.0`](https://github.com/agentclientprotocol/agent-client-protocol/tree/schema-v1.21.0)
|
|
477
477
|
commit `272bf799f35a258c6a4107a0410ed361e83683d3`.
|
|
478
478
|
|
|
479
|
-
§exec-executor-slot An EXEC heading takes an optional `[executor]` slot before its path:
|
|
479
|
+
§exec-executor-slot An EXEC heading takes an optional `[executor]` slot before its path: `### EXEC0 [python3] (tools/report.py)`. The executor may also trail the path (`### EXEC0 (tools/report.py) [python3]`); either position binds the same AST, since no other slot after a path uses `[...]`. Canonical rendering leads with the executor. Two executors are the one rejected shape. The bracket names the registered executor that runs the program — a tool family, a language runtime, or the shell — and lexes as one `EXECUTOR` token only on an EXEC heading. The path names the program: a registered tool of that family, or a script file or entry. A bare `### EXEC0` is the shell running its body; with a path the body is the program's input. The AST carries `executor` (null for the shell) and `target` separately; the path is never split. Each of the executor, the path, and the `<timeout,poll>` scope appears at most once. Tool teaching, not the grammar, spells the registered executors; a `{cwd=…}` metadata block, interpreted by the executor, names the working directory.
|
|
480
480
|
|
|
481
481
|
§send-label SEND's path slot carries either a turn label or a recipient. The four
|
|
482
482
|
labels `(NEXT)`, `(WAIT)`, `(TERM)`, and `(FAIL)` lex as one `SEND_LABEL` token
|
|
483
483
|
and make the SEND terminal: the AST `status` is 102, 202, 200, or 499 and `target`
|
|
484
484
|
is null. A label SEND names no recipient; a label beside a recipient path is one
|
|
485
485
|
error at the heading naming that rule. A SEND whose path is a recipient
|
|
486
|
-
(
|
|
486
|
+
(`### SEND0 (worker://recheck)`, `(https://…)`, `(a2a://…)`), or whose path slot is
|
|
487
487
|
empty (the user), is a mid-turn message with `status` null. The GBNF rail spells a
|
|
488
488
|
mid-turn recipient as a URL, so a constrained turn can never place a label mid-turn.
|
|
489
489
|
|
|
@@ -492,7 +492,7 @@ and poll ({§park-202-only}); the dispatcher owns what it accepts. Every other l
|
|
|
492
492
|
takes no scope.
|
|
493
493
|
|
|
494
494
|
§kill-scope KILL takes an optional text-coordinate scope beside its target, numeric or
|
|
495
|
-
anchored (
|
|
495
|
+
anchored (`### KILL0 (log:///**/READ) <17,-1>`, `### KILL0 (worker:///notes.md)
|
|
496
496
|
<@aB3dE,@0Aa9Z>`), and an optional one-line matcher body that selects rows. The AST
|
|
497
497
|
is `{ op: "KILL", target, lineMarker: TextLineMarker | null, body: MatcherBody | null }`.
|
|
498
498
|
Without a scope, KILL retires or deletes the whole target; with one, it removes exactly
|
|
@@ -526,7 +526,7 @@ Producers never emit that form. Other arities and decimal text coordinates are
|
|
|
526
526
|
runtime 416 failures.
|
|
527
527
|
|
|
528
528
|
§bare-statement **BARE requests one isolated model inference.** Its required
|
|
529
|
-
body is the complete prompt
|
|
529
|
+
body is the complete prompt: no
|
|
530
530
|
target, scope, persistent worker identity, or output-language statement shape
|
|
531
531
|
is represented in the AST. Runtime provider selection, batching, accounting,
|
|
532
532
|
and observation timing belong to the consuming service.
|
|
@@ -667,7 +667,7 @@ visitor error and never falls back to glob matching.
|
|
|
667
667
|
disposition signal, never by a whole-turn alternative), so one malformed heading costs one
|
|
668
668
|
diagnostic and every later statement, the terminal SEND included, stands on its own. Any
|
|
669
669
|
other second path slot names the one-slot rule.
|
|
670
|
-
- §scope-slot-tolerance A line scope written inside a path slot (
|
|
670
|
+
- §scope-slot-tolerance A line scope written inside a path slot (`### COPY0 (worker:///src.md<2,3>)`)
|
|
671
671
|
is read as `(worker:///src.md) <2,3>` — `<` and `>` are not URI characters, so a `<…>` right
|
|
672
672
|
before a slot's closing paren can only be a scope; every path slot of a statement is repaired
|
|
673
673
|
the same way — and the slip is one warning-severity advisory at the `<`, placed right after its
|
|
@@ -728,7 +728,7 @@ The operation column names the canonical AST operation after
|
|
|
728
728
|
| COPY/MOVE destination | 0/1/2/4 text coordinates after target | Region replaced or insertion point at the destination |
|
|
729
729
|
| KILL | 0/1/2 text coordinates | Whole target when absent; one physical line or inclusive range when present ({§kill-scope}) |
|
|
730
730
|
| EXEC | `timeout[,poll]` | Spawn lifetime bound and poll cadence in minutes |
|
|
731
|
-
|
|
|
731
|
+
| `### SEND0 (WAIT)` | `timeout[,poll]` | Bounded or indefinite wait and optional poll cadence ({§send-wait-scope}) |
|
|
732
732
|
|
|
733
733
|
Text coordinates use the algebra in {§text-scope-semantics}: one integer is a
|
|
734
734
|
whole line, two integers are an inclusive whole-line range, and four integers
|
|
@@ -787,17 +787,17 @@ Delimiter rules:
|
|
|
787
787
|
Example — a lane-0 turn stored inside a lane-2 EDIT body:
|
|
788
788
|
|
|
789
789
|
```example
|
|
790
|
-
|
|
790
|
+
## PLAN2
|
|
791
791
|
[{"content":"Store the quoted turn.","status":"in_progress"}]
|
|
792
792
|
|
|
793
|
-
|
|
794
|
-
|
|
793
|
+
### EDIT2 (worker:///quoted.plurnk)
|
|
794
|
+
## PLAN0
|
|
795
795
|
[{"content":"Answer from memory.","status":"in_progress"}]
|
|
796
796
|
|
|
797
|
-
|
|
797
|
+
### SEND0 (TERM)
|
|
798
798
|
Paris.
|
|
799
799
|
|
|
800
|
-
|
|
800
|
+
### SEND2 (TERM)
|
|
801
801
|
Stored the quoted turn.
|
|
802
802
|
```
|
|
803
803
|
|
|
@@ -843,7 +843,7 @@ disposition. The shape rules ARE structural:
|
|
|
843
843
|
- §no-idle-102 A **zero-statement turn may not conclude `(NEXT)`** — "continue"
|
|
844
844
|
with nothing submitted is a spin. The GBNF's `tail-0` exits through
|
|
845
845
|
a terminal trie without the `(NEXT)` tail, so the idle turn (`PLAN`
|
|
846
|
-
straight into
|
|
846
|
+
straight into `### SEND0 (NEXT)`) is unemittable; one statement restores
|
|
847
847
|
the full label set. The other three stay legal bare (a zero-op
|
|
848
848
|
`(WAIT)` is the engine's obligation check). ANTLR stays tolerant
|
|
849
849
|
(ingest side). A dispatch-emptied turn — ops emitted but failing
|
|
@@ -912,7 +912,7 @@ possible. EOF is a valid body boundary. An unfinished signal, target, or metadat
|
|
|
912
912
|
|
|
913
913
|
| Location | Canonical generation | Tolerant ANTLR ingestion |
|
|
914
914
|
|-----------------------------|---------------------------------------|-----------------------------------------------------------|
|
|
915
|
-
| Heading marker |
|
|
915
|
+
| Heading marker | `## PLAN0` or `## OP0` at column zero | The initial PLAN may directly follow leading TEXT; subsequent headings retain exact depth and column |
|
|
916
916
|
| Between OP and delimiter | Adjacent | Must remain adjacent |
|
|
917
917
|
| Before each modifier | One ASCII space | Zero or more horizontal whitespace characters |
|
|
918
918
|
| Inside signal | Adjacent values | Horizontal whitespace is ignored; newline is invalid |
|
|
@@ -948,7 +948,7 @@ express. Consumers never receive ANTLR parse-tree or token types.
|
|
|
948
948
|
least one parsed source operation. Canonical generation may begin with H1 PLAN
|
|
949
949
|
(a SHOULD, never repeated mid-turn) and ends with a label H2 SEND. A turn without
|
|
950
950
|
a PLAN stands as written — no PLAN is synthesized and nothing is diagnosed. When
|
|
951
|
-
no valid terminal SEND was parsed, the parser appends a bodyless
|
|
951
|
+
no valid terminal SEND was parsed, the parser appends a bodyless `### SEND0 (NEXT)`
|
|
952
952
|
carrying {§parser-position} `UNKNOWN_POSITION` and one exact hard diagnostic
|
|
953
953
|
stating the observed boundary failure and applied default. The source text
|
|
954
954
|
remains unchanged. The GBNF rail takes the same optional PLAN.
|
|
@@ -1008,7 +1008,6 @@ than alternate consumer entry points:
|
|
|
1008
1008
|
|--------------------------------------------|---------------------------------------------------------------------------------------------------------------|
|
|
1009
1009
|
| `AstBuilder` | Consumes generated ANTLR contexts; `PlurnkParser` and `parsePath` own its API |
|
|
1010
1010
|
| `PlurnkErrorStrategy`, `RecordingListener` | Assemble parser recovery and diagnostics around `antlr4ng`; consumers receive `PlurnkParseError` values |
|
|
1011
|
-
| `Jsonplurnk` test helper | Independently checks the Core-owned {§jsonplurnk} renderer corpus; it is neither shipped code nor a root API |
|
|
1012
1011
|
|
|
1013
1012
|
### CLI
|
|
1014
1013
|
|
|
@@ -1308,8 +1307,8 @@ the sole and complete owner of syntax-error messaging because it holds the
|
|
|
1308
1307
|
parse state, lexer mode, and expected-token set that no consumer has. It
|
|
1309
1308
|
produces the final diagnostic message, deduplicated expected-token lists, and
|
|
1310
1309
|
turn-shape diagnostics. No valid leading PLAN yields ``No valid leading PLAN
|
|
1311
|
-
was parsed; an empty
|
|
1312
|
-
valid terminal SEND was parsed;
|
|
1310
|
+
was parsed; an empty `## PLAN0` was used.``; no valid terminal SEND yields ``No
|
|
1311
|
+
valid terminal SEND was parsed; `### SEND0 (NEXT)` was used.``; source with no
|
|
1313
1312
|
parsed operation yields `no valid Plurnk operation was found.` Targeted
|
|
1314
1313
|
diagnostics are:
|
|
1315
1314
|
|
|
@@ -1320,8 +1319,8 @@ diagnostics are:
|
|
|
1320
1319
|
already the inline body, {§heading-inline-body}). Slash-led regex and XPath are
|
|
1321
1320
|
excluded because `/` can be target data.
|
|
1322
1321
|
- §bare-target-redirect **A `(target)` on BARE.** BARE takes no `(path)`; a model that
|
|
1323
|
-
writes its prompt, or the prompt's address, into a parenthesized slot (
|
|
1324
|
-
(What day is it?)`,
|
|
1322
|
+
writes its prompt, or the prompt's address, into a parenthesized slot (`### BARE0
|
|
1323
|
+
(What day is it?)`, `### BARE0 (prompt:///1/1)`) is told that the prompt is the body
|
|
1325
1324
|
line beneath the heading, with the heading's own opener, instead of the generic
|
|
1326
1325
|
slot list. Two operator sessions on 2026-08-26 produced exactly these shapes.
|
|
1327
1326
|
- §combined-anchor-line-redirect **Combined anchor and line number in a scope.**
|
|
@@ -1329,8 +1328,8 @@ diagnostics are:
|
|
|
1329
1328
|
error: `a scope position accepts one line coordinate; use the \`@hash\` anchor
|
|
1330
1329
|
without its displayed line number`. A malformed header scope is consumed as
|
|
1331
1330
|
one token at either COPY/MOVE operand; neither produces a punctuation cascade.
|
|
1332
|
-
- §label-recipient-redirect **A label beside a recipient.**
|
|
1333
|
-
(worker://parent)` and
|
|
1331
|
+
- §label-recipient-redirect **A label beside a recipient.** `### SEND0 (TERM)
|
|
1332
|
+
(worker://parent)` and `### SEND0 (worker://parent) (TERM)` are one parser error at
|
|
1334
1333
|
the heading: `a (NEXT|WAIT|TERM|FAIL) SEND names no recipient; message a recipient
|
|
1335
1334
|
with its own SEND first` ({§send-label}).
|
|
1336
1335
|
- §misplaced-annotation-advisory **Annotation in the body.** A READ or FIND whose
|
|
@@ -1363,7 +1362,7 @@ Examples of canonical hard facts:
|
|
|
1363
1362
|
- `unrecognized character '<' in target`
|
|
1364
1363
|
- `unrecognized character ':' in signal`
|
|
1365
1364
|
- `unrecognized character 'X' in statement header`
|
|
1366
|
-
- `a turn must begin with
|
|
1365
|
+
- `a turn must begin with \`## PLAN0\``
|
|
1367
1366
|
- `expected ')'; got ':'`
|
|
1368
1367
|
|
|
1369
1368
|
Each malformed statement produces at most one hard error. The first recorded
|
|
@@ -1398,6 +1397,6 @@ runtime constructs this; the parser provides the fields):
|
|
|
1398
1397
|
"column": 12,
|
|
1399
1398
|
"source": "parser",
|
|
1400
1399
|
"severity": "error",
|
|
1401
|
-
"message": "target slot of
|
|
1400
|
+
"message": "target slot of `### READ0` opened at line 1 but never closed - add `)`"
|
|
1402
1401
|
}
|
|
1403
1402
|
```
|
package/dist/plurnk.gemma.gbnf
CHANGED
|
@@ -2,66 +2,67 @@
|
|
|
2
2
|
# @plurnk-response-root root-gemma
|
|
3
3
|
root ::= root-gemma
|
|
4
4
|
section-body-b0 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
5
|
-
section-body-b1 ::= ("#" section-body-
|
|
6
|
-
section-body-b2 ::= ("#" section-body-
|
|
7
|
-
section-body-b3 ::= ("#" section-body-b1 | [
|
|
8
|
-
section-body-b4 ::= ("#" section-body-b1 | [
|
|
9
|
-
section-body-b5 ::= ("#" section-body-b1 | [
|
|
10
|
-
section-body-b6 ::= ("#" section-body-
|
|
11
|
-
section-body-b7 ::= ("#" section-body-
|
|
12
|
-
section-body-b8 ::= ("#" section-body-b1 | [
|
|
13
|
-
section-body-b9 ::= ("#" section-body-b1 | [
|
|
14
|
-
section-body-b10 ::= ("#" section-body-b1 | [
|
|
15
|
-
section-body-b11 ::= ("#" section-body-b1 | [
|
|
16
|
-
section-body-b12 ::= ("#" section-body-b1 | [
|
|
17
|
-
section-body-b13 ::= ("#" section-body-b1 | [
|
|
18
|
-
section-body-b14 ::= ("#" section-body-b1 | [
|
|
19
|
-
section-body-b15 ::= ("#" section-body-b1 | [
|
|
20
|
-
section-body-b16 ::= ("#" section-body-b1 | [
|
|
21
|
-
section-body-b17 ::= ("#" section-body-b1 | [
|
|
22
|
-
section-body-b18 ::= ("#" section-body-b1 | [
|
|
23
|
-
section-body-b19 ::= ("#" section-body-b1 | [
|
|
24
|
-
section-body-b20 ::= ("#" section-body-b1 | [
|
|
25
|
-
section-body-b21 ::= ("#" section-body-b1 | [
|
|
26
|
-
section-body-b22 ::= ("#" section-body-b1 | [
|
|
27
|
-
section-body-b23 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 |
|
|
28
|
-
section-body-b24 ::= ("#" section-body-b1 | [
|
|
29
|
-
section-body-b25 ::= ("#" section-body-b1 | [
|
|
30
|
-
section-body-b26 ::= ("#" section-body-b1 | [
|
|
31
|
-
section-body-b27 ::= ("#" section-body-b1 | [
|
|
32
|
-
section-body-b28 ::= ("#" section-body-b1 | [
|
|
33
|
-
section-body-b29 ::= ("#" section-body-b1 | [
|
|
34
|
-
section-body-b30 ::= ("#" section-body-b1 | [
|
|
35
|
-
section-body-b31 ::= ("#" section-body-b1 | [
|
|
36
|
-
section-body-b32 ::= ("#" section-body-b1 | [
|
|
37
|
-
section-body-b33 ::= ("#" section-body-b1 | [
|
|
38
|
-
section-body-b34 ::= ("#" section-body-b1 | [
|
|
39
|
-
section-body-b35 ::= ("#" section-body-b1 | [
|
|
40
|
-
section-body-b36 ::= ("#" section-body-b1 | [
|
|
41
|
-
section-body-b37 ::= ("#" section-body-b1 | [
|
|
42
|
-
section-body-b38 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
5
|
+
section-body-b1 ::= ("#" section-body-b2 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
6
|
+
section-body-b2 ::= ("#" section-body-b7 | " " section-body-b3 | [PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
7
|
+
section-body-b3 ::= ("#" section-body-b1 | [ LANFIDRETCOYMVSXBWK] section-body-b0 | "P" section-body-b4 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
8
|
+
section-body-b4 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | "L" section-body-b5 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
9
|
+
section-body-b5 ::= ("#" section-body-b1 | [ PLNFIDRETCOYMVSXBWK] section-body-b0 | "A" section-body-b6 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
10
|
+
section-body-b6 ::= ("#" section-body-b1 | [ PLAFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
11
|
+
section-body-b7 ::= ("#" section-body-b7 | " " section-body-b8 | [PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
12
|
+
section-body-b8 ::= ("#" section-body-b1 | [ LANIDTOYVX] section-body-b0 | "P" section-body-b4 | "F" section-body-b9 | "R" section-body-b12 | "E" section-body-b15 | "C" section-body-b18 | "M" section-body-b21 | "S" section-body-b24 | "B" section-body-b29 | "W" section-body-b32 | "K" section-body-b37 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
13
|
+
section-body-b9 ::= ("#" section-body-b1 | [ PLANFDRETCYMVSXBWK] section-body-b0 | "I" section-body-b10 | "O" section-body-b35 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
14
|
+
section-body-b10 ::= ("#" section-body-b1 | [ PLAFIDRETCOYMVSXBWK] section-body-b0 | "N" section-body-b11 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
15
|
+
section-body-b11 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
16
|
+
section-body-b12 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | "E" section-body-b13 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
17
|
+
section-body-b13 ::= ("#" section-body-b1 | [ PLNFIDRETCOYMVSXBWK] section-body-b0 | "A" section-body-b14 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
18
|
+
section-body-b14 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
19
|
+
section-body-b15 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSBWK] section-body-b0 | "D" section-body-b16 | "X" section-body-b27 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
20
|
+
section-body-b16 ::= ("#" section-body-b1 | [ PLANFDRETCOYMVSXBWK] section-body-b0 | "I" section-body-b17 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
21
|
+
section-body-b17 ::= ("#" section-body-b1 | [ PLANFIDRECOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
22
|
+
section-body-b18 ::= ("#" section-body-b1 | [ PLANFIDRETCYMVSXBWK] section-body-b0 | "O" section-body-b19 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
23
|
+
section-body-b19 ::= ("#" section-body-b1 | [ LANFIDRETCOYMVSXBWK] section-body-b0 | "P" section-body-b20 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
24
|
+
section-body-b20 ::= ("#" section-body-b1 | [ PLANFIDRETCOMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
25
|
+
section-body-b21 ::= ("#" section-body-b1 | [ PLANFIDRETCYMVSXBWK] section-body-b0 | "O" section-body-b22 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
26
|
+
section-body-b22 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMSXBWK] section-body-b0 | "V" section-body-b23 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
27
|
+
section-body-b23 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
28
|
+
section-body-b24 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | "E" section-body-b25 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
29
|
+
section-body-b25 ::= ("#" section-body-b1 | [ PLAFIDRETCOYMVSXBWK] section-body-b0 | "N" section-body-b26 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
30
|
+
section-body-b26 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
31
|
+
section-body-b27 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | "E" section-body-b28 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
32
|
+
section-body-b28 ::= ("#" section-body-b1 | [ PLANFIDRETOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
33
|
+
section-body-b29 ::= ("#" section-body-b1 | [ PLNFIDRETCOYMVSXBWK] section-body-b0 | "A" section-body-b30 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
34
|
+
section-body-b30 ::= ("#" section-body-b1 | [ PLANFIDETCOYMVSXBWK] section-body-b0 | "R" section-body-b31 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
35
|
+
section-body-b31 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
36
|
+
section-body-b32 ::= ("#" section-body-b1 | [ PLANFIDRETCYMVSXBWK] section-body-b0 | "O" section-body-b33 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
37
|
+
section-body-b33 ::= ("#" section-body-b1 | [ PLANFIDETCOYMVSXBWK] section-body-b0 | "R" section-body-b34 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
38
|
+
section-body-b34 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMVSXBW] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
39
|
+
section-body-b35 ::= ("#" section-body-b1 | [ PLANFIDETCOYMVSXBWK] section-body-b0 | "R" section-body-b36 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
40
|
+
section-body-b36 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMVSXBW] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
41
|
+
section-body-b37 ::= ("#" section-body-b1 | [ PLANFDRETCOYMVSXBWK] section-body-b0 | "I" section-body-b38 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
42
|
+
section-body-b38 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | "L" section-body-b39 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
43
|
+
section-body-b39 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
43
44
|
section-body-ne ::= "#" section-body-b1 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0
|
|
44
45
|
annotation-body-b0 ::= ("-" annotation-body-b1 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
|
|
45
46
|
annotation-body-b1 ::= ("-" annotation-body-b2 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
|
|
46
47
|
annotation-body-b2 ::= ("-" annotation-body-b2 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
|
|
47
48
|
annotation-body-ne ::= "-" annotation-body-b1 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0
|
|
48
49
|
pattern-body-ne ::= [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:#] [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r]*
|
|
49
|
-
plan ::= "
|
|
50
|
-
find ::= "
|
|
51
|
-
read ::= "
|
|
52
|
-
edit ::= "
|
|
53
|
-
copy ::= "
|
|
54
|
-
move ::= "
|
|
55
|
-
exec ::= "
|
|
56
|
-
bare ::= "
|
|
57
|
-
work ::= "
|
|
58
|
-
fork ::= "
|
|
59
|
-
kill ::= "
|
|
60
|
-
send-mid ::= "
|
|
61
|
-
send-102 ::= "
|
|
62
|
-
send-200 ::= "
|
|
63
|
-
send-202 ::= "
|
|
64
|
-
send-499 ::= "
|
|
50
|
+
plan ::= "## PLAN0" annotation-slot? "\n" section-body-ne "\n"
|
|
51
|
+
find ::= "### FIND0" target-slot line-slot? annotation-slot? "\n" | "### FIND0" target-slot line-slot? annotation-slot? "\n" pattern-body-ne "\n"
|
|
52
|
+
read ::= "### READ0" target-slot text-line-slot? annotation-slot? "\n" | "### READ0" target-slot text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
|
|
53
|
+
edit ::= "### EDIT0" target-slot text-line-slot? annotation-slot? "\n" | "### EDIT0" target-slot text-line-slot? annotation-slot? "\n" section-body-ne "\n"
|
|
54
|
+
copy ::= "### COPY0" target-slot text-line-slot? target-slot text-line-slot? annotation-slot? "\n"
|
|
55
|
+
move ::= "### MOVE0" target-slot text-line-slot? target-slot text-line-slot? annotation-slot? "\n"
|
|
56
|
+
exec ::= "### EXEC0" executor-slot? exec-program? line-slot? annotation-slot? "\n" | "### EXEC0" executor-slot? exec-program? line-slot? annotation-slot? "\n" section-body-ne "\n"
|
|
57
|
+
bare ::= "### BARE0" annotation-slot? "\n" section-body-ne "\n"
|
|
58
|
+
work ::= "### WORK0" target-slot annotation-slot? "\n" section-body-ne "\n"
|
|
59
|
+
fork ::= "### FORK0" target-slot annotation-slot? "\n" section-body-ne "\n"
|
|
60
|
+
kill ::= "### KILL0" target-slot text-line-slot? annotation-slot? "\n" | "### KILL0" target-slot text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
|
|
61
|
+
send-mid ::= "### SEND0" recipient-slot annotation-slot? "\n" | "### SEND0" recipient-slot annotation-slot? "\n" section-body-ne "\n" | "### SEND0" annotation-slot? "\n" | "### SEND0" annotation-slot? "\n" section-body-ne "\n"
|
|
62
|
+
send-102 ::= "### SEND0 (NEXT)" annotation-slot? "\n" section-body-ne
|
|
63
|
+
send-200 ::= "### SEND0 (TERM)" annotation-slot? "\n" section-body-ne
|
|
64
|
+
send-202 ::= "### SEND0 (WAIT)" park-slot? annotation-slot? "\n" section-body-ne
|
|
65
|
+
send-499 ::= "### SEND0 (FAIL)" annotation-slot? "\n" section-body-ne
|
|
65
66
|
send-final-any ::= send-102 | send-200 | send-202 | send-499
|
|
66
67
|
send-final-first ::= send-200 | send-202 | send-499
|
|
67
68
|
op-statement ::= find | read | edit | copy | move | exec | bare | work | fork | kill
|
package/dist/plurnk.qwen.gbnf
CHANGED
|
@@ -2,66 +2,67 @@
|
|
|
2
2
|
# @plurnk-response-root root-qwen-response
|
|
3
3
|
root ::= root-qwen
|
|
4
4
|
section-body-b0 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
5
|
-
section-body-b1 ::= ("#" section-body-
|
|
6
|
-
section-body-b2 ::= ("#" section-body-
|
|
7
|
-
section-body-b3 ::= ("#" section-body-b1 | [
|
|
8
|
-
section-body-b4 ::= ("#" section-body-b1 | [
|
|
9
|
-
section-body-b5 ::= ("#" section-body-b1 | [
|
|
10
|
-
section-body-b6 ::= ("#" section-body-
|
|
11
|
-
section-body-b7 ::= ("#" section-body-
|
|
12
|
-
section-body-b8 ::= ("#" section-body-b1 | [
|
|
13
|
-
section-body-b9 ::= ("#" section-body-b1 | [
|
|
14
|
-
section-body-b10 ::= ("#" section-body-b1 | [
|
|
15
|
-
section-body-b11 ::= ("#" section-body-b1 | [
|
|
16
|
-
section-body-b12 ::= ("#" section-body-b1 | [
|
|
17
|
-
section-body-b13 ::= ("#" section-body-b1 | [
|
|
18
|
-
section-body-b14 ::= ("#" section-body-b1 | [
|
|
19
|
-
section-body-b15 ::= ("#" section-body-b1 | [
|
|
20
|
-
section-body-b16 ::= ("#" section-body-b1 | [
|
|
21
|
-
section-body-b17 ::= ("#" section-body-b1 | [
|
|
22
|
-
section-body-b18 ::= ("#" section-body-b1 | [
|
|
23
|
-
section-body-b19 ::= ("#" section-body-b1 | [
|
|
24
|
-
section-body-b20 ::= ("#" section-body-b1 | [
|
|
25
|
-
section-body-b21 ::= ("#" section-body-b1 | [
|
|
26
|
-
section-body-b22 ::= ("#" section-body-b1 | [
|
|
27
|
-
section-body-b23 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 |
|
|
28
|
-
section-body-b24 ::= ("#" section-body-b1 | [
|
|
29
|
-
section-body-b25 ::= ("#" section-body-b1 | [
|
|
30
|
-
section-body-b26 ::= ("#" section-body-b1 | [
|
|
31
|
-
section-body-b27 ::= ("#" section-body-b1 | [
|
|
32
|
-
section-body-b28 ::= ("#" section-body-b1 | [
|
|
33
|
-
section-body-b29 ::= ("#" section-body-b1 | [
|
|
34
|
-
section-body-b30 ::= ("#" section-body-b1 | [
|
|
35
|
-
section-body-b31 ::= ("#" section-body-b1 | [
|
|
36
|
-
section-body-b32 ::= ("#" section-body-b1 | [
|
|
37
|
-
section-body-b33 ::= ("#" section-body-b1 | [
|
|
38
|
-
section-body-b34 ::= ("#" section-body-b1 | [
|
|
39
|
-
section-body-b35 ::= ("#" section-body-b1 | [
|
|
40
|
-
section-body-b36 ::= ("#" section-body-b1 | [
|
|
41
|
-
section-body-b37 ::= ("#" section-body-b1 | [
|
|
42
|
-
section-body-b38 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
5
|
+
section-body-b1 ::= ("#" section-body-b2 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
6
|
+
section-body-b2 ::= ("#" section-body-b7 | " " section-body-b3 | [PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
7
|
+
section-body-b3 ::= ("#" section-body-b1 | [ LANFIDRETCOYMVSXBWK] section-body-b0 | "P" section-body-b4 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
8
|
+
section-body-b4 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | "L" section-body-b5 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
9
|
+
section-body-b5 ::= ("#" section-body-b1 | [ PLNFIDRETCOYMVSXBWK] section-body-b0 | "A" section-body-b6 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
10
|
+
section-body-b6 ::= ("#" section-body-b1 | [ PLAFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
11
|
+
section-body-b7 ::= ("#" section-body-b7 | " " section-body-b8 | [PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
12
|
+
section-body-b8 ::= ("#" section-body-b1 | [ LANIDTOYVX] section-body-b0 | "P" section-body-b4 | "F" section-body-b9 | "R" section-body-b12 | "E" section-body-b15 | "C" section-body-b18 | "M" section-body-b21 | "S" section-body-b24 | "B" section-body-b29 | "W" section-body-b32 | "K" section-body-b37 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
13
|
+
section-body-b9 ::= ("#" section-body-b1 | [ PLANFDRETCYMVSXBWK] section-body-b0 | "I" section-body-b10 | "O" section-body-b35 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
14
|
+
section-body-b10 ::= ("#" section-body-b1 | [ PLAFIDRETCOYMVSXBWK] section-body-b0 | "N" section-body-b11 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
15
|
+
section-body-b11 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
16
|
+
section-body-b12 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | "E" section-body-b13 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
17
|
+
section-body-b13 ::= ("#" section-body-b1 | [ PLNFIDRETCOYMVSXBWK] section-body-b0 | "A" section-body-b14 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
18
|
+
section-body-b14 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
19
|
+
section-body-b15 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSBWK] section-body-b0 | "D" section-body-b16 | "X" section-body-b27 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
20
|
+
section-body-b16 ::= ("#" section-body-b1 | [ PLANFDRETCOYMVSXBWK] section-body-b0 | "I" section-body-b17 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
21
|
+
section-body-b17 ::= ("#" section-body-b1 | [ PLANFIDRECOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
22
|
+
section-body-b18 ::= ("#" section-body-b1 | [ PLANFIDRETCYMVSXBWK] section-body-b0 | "O" section-body-b19 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
23
|
+
section-body-b19 ::= ("#" section-body-b1 | [ LANFIDRETCOYMVSXBWK] section-body-b0 | "P" section-body-b20 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
24
|
+
section-body-b20 ::= ("#" section-body-b1 | [ PLANFIDRETCOMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
25
|
+
section-body-b21 ::= ("#" section-body-b1 | [ PLANFIDRETCYMVSXBWK] section-body-b0 | "O" section-body-b22 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
26
|
+
section-body-b22 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMSXBWK] section-body-b0 | "V" section-body-b23 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
27
|
+
section-body-b23 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
28
|
+
section-body-b24 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | "E" section-body-b25 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
29
|
+
section-body-b25 ::= ("#" section-body-b1 | [ PLAFIDRETCOYMVSXBWK] section-body-b0 | "N" section-body-b26 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
30
|
+
section-body-b26 ::= ("#" section-body-b1 | [ PLANFIRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
31
|
+
section-body-b27 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | "E" section-body-b28 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
32
|
+
section-body-b28 ::= ("#" section-body-b1 | [ PLANFIDRETOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
33
|
+
section-body-b29 ::= ("#" section-body-b1 | [ PLNFIDRETCOYMVSXBWK] section-body-b0 | "A" section-body-b30 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
34
|
+
section-body-b30 ::= ("#" section-body-b1 | [ PLANFIDETCOYMVSXBWK] section-body-b0 | "R" section-body-b31 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
35
|
+
section-body-b31 ::= ("#" section-body-b1 | [ PLANFIDRTCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
36
|
+
section-body-b32 ::= ("#" section-body-b1 | [ PLANFIDRETCYMVSXBWK] section-body-b0 | "O" section-body-b33 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
37
|
+
section-body-b33 ::= ("#" section-body-b1 | [ PLANFIDETCOYMVSXBWK] section-body-b0 | "R" section-body-b34 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
38
|
+
section-body-b34 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMVSXBW] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
39
|
+
section-body-b35 ::= ("#" section-body-b1 | [ PLANFIDETCOYMVSXBWK] section-body-b0 | "R" section-body-b36 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
40
|
+
section-body-b36 ::= ("#" section-body-b1 | [ PLANFIDRETCOYMVSXBW] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
41
|
+
section-body-b37 ::= ("#" section-body-b1 | [ PLANFDRETCOYMVSXBWK] section-body-b0 | "I" section-body-b38 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
42
|
+
section-body-b38 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | "L" section-body-b39 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
43
|
+
section-body-b39 ::= ("#" section-body-b1 | [ PANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0)?
|
|
43
44
|
section-body-ne ::= "#" section-body-b1 | [ PLANFIDRETCOYMVSXBWK] section-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F# PLANFIDRETCOYMVSXBWK] section-body-b0
|
|
44
45
|
annotation-body-b0 ::= ("-" annotation-body-b1 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
|
|
45
46
|
annotation-body-b1 ::= ("-" annotation-body-b2 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
|
|
46
47
|
annotation-body-b2 ::= ("-" annotation-body-b2 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0)?
|
|
47
48
|
annotation-body-ne ::= "-" annotation-body-b1 | ">" annotation-body-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r>-] annotation-body-b0
|
|
48
49
|
pattern-body-ne ::= [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:#] [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r]*
|
|
49
|
-
plan ::= "
|
|
50
|
-
find ::= "
|
|
51
|
-
read ::= "
|
|
52
|
-
edit ::= "
|
|
53
|
-
copy ::= "
|
|
54
|
-
move ::= "
|
|
55
|
-
exec ::= "
|
|
56
|
-
bare ::= "
|
|
57
|
-
work ::= "
|
|
58
|
-
fork ::= "
|
|
59
|
-
kill ::= "
|
|
60
|
-
send-mid ::= "
|
|
61
|
-
send-102 ::= "
|
|
62
|
-
send-200 ::= "
|
|
63
|
-
send-202 ::= "
|
|
64
|
-
send-499 ::= "
|
|
50
|
+
plan ::= "## PLAN0" annotation-slot? "\n" section-body-ne "\n"
|
|
51
|
+
find ::= "### FIND0" target-slot line-slot? annotation-slot? "\n" | "### FIND0" target-slot line-slot? annotation-slot? "\n" pattern-body-ne "\n"
|
|
52
|
+
read ::= "### READ0" target-slot text-line-slot? annotation-slot? "\n" | "### READ0" target-slot text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
|
|
53
|
+
edit ::= "### EDIT0" target-slot text-line-slot? annotation-slot? "\n" | "### EDIT0" target-slot text-line-slot? annotation-slot? "\n" section-body-ne "\n"
|
|
54
|
+
copy ::= "### COPY0" target-slot text-line-slot? target-slot text-line-slot? annotation-slot? "\n"
|
|
55
|
+
move ::= "### MOVE0" target-slot text-line-slot? target-slot text-line-slot? annotation-slot? "\n"
|
|
56
|
+
exec ::= "### EXEC0" executor-slot? exec-program? line-slot? annotation-slot? "\n" | "### EXEC0" executor-slot? exec-program? line-slot? annotation-slot? "\n" section-body-ne "\n"
|
|
57
|
+
bare ::= "### BARE0" annotation-slot? "\n" section-body-ne "\n"
|
|
58
|
+
work ::= "### WORK0" target-slot annotation-slot? "\n" section-body-ne "\n"
|
|
59
|
+
fork ::= "### FORK0" target-slot annotation-slot? "\n" section-body-ne "\n"
|
|
60
|
+
kill ::= "### KILL0" target-slot text-line-slot? annotation-slot? "\n" | "### KILL0" target-slot text-line-slot? annotation-slot? "\n" pattern-body-ne "\n"
|
|
61
|
+
send-mid ::= "### SEND0" recipient-slot annotation-slot? "\n" | "### SEND0" recipient-slot annotation-slot? "\n" section-body-ne "\n" | "### SEND0" annotation-slot? "\n" | "### SEND0" annotation-slot? "\n" section-body-ne "\n"
|
|
62
|
+
send-102 ::= "### SEND0 (NEXT)" annotation-slot? "\n" section-body-ne
|
|
63
|
+
send-200 ::= "### SEND0 (TERM)" annotation-slot? "\n" section-body-ne
|
|
64
|
+
send-202 ::= "### SEND0 (WAIT)" park-slot? annotation-slot? "\n" section-body-ne
|
|
65
|
+
send-499 ::= "### SEND0 (FAIL)" annotation-slot? "\n" section-body-ne
|
|
65
66
|
send-final-any ::= send-102 | send-200 | send-202 | send-499
|
|
66
67
|
send-final-first ::= send-200 | send-202 | send-499
|
|
67
68
|
op-statement ::= find | read | edit | copy | move | exec | bare | work | fork | kill
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AstBuilder.d.ts","sourceRoot":"","sources":["../../src/AstBuilder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIR,eAAe,EAaf,UAAU,EAGV,eAAe,EACf,QAAQ,EAMX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAGR,sBAAsB,EActB,gBAAgB,EAChB,mBAAmB,EACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAIH,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EAGvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAKrD,OAAO,QAAQ,OAAO,CAAC;IACnB,SAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CACtD;AAQD,MAAM,CAAC,OAAO,OAAO,UAAU;;IAK3B,MAAM,CAAC,cAAc,IAAI,gBAAgB,EAAE,CAI1C;IAuBD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,cAAc,GAAG,eAAe,CAwBxI;IAyBD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,sBAAsB,GAAG,eAAe,CAK/D;
|
|
1
|
+
{"version":3,"file":"AstBuilder.d.ts","sourceRoot":"","sources":["../../src/AstBuilder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIR,eAAe,EAaf,UAAU,EAGV,eAAe,EACf,QAAQ,EAMX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAGR,sBAAsB,EActB,gBAAgB,EAChB,mBAAmB,EACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAIH,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EAGvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAKrD,OAAO,QAAQ,OAAO,CAAC;IACnB,SAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CACtD;AAQD,MAAM,CAAC,OAAO,OAAO,UAAU;;IAK3B,MAAM,CAAC,cAAc,IAAI,gBAAgB,EAAE,CAI1C;IAuBD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,cAAc,GAAG,eAAe,CAwBxI;IAyBD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,sBAAsB,GAAG,eAAe,CAK/D;IA8bD;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,QAAiC,GAAG,UAAU,GAAG,IAAI,CA+BvF;CAsJJ"}
|
package/dist/src/AstBuilder.js
CHANGED
|
@@ -268,12 +268,22 @@ export default class AstBuilder {
|
|
|
268
268
|
op: "EXEC",
|
|
269
269
|
delimiter: AstBuilder.#splitDelimiter(ctx.OPEN_EXEC().getText(), "EXEC"),
|
|
270
270
|
annotation: AstBuilder.#annotationOf(ctx),
|
|
271
|
-
executor: ctx
|
|
271
|
+
executor: AstBuilder.#executorOf(ctx, position),
|
|
272
272
|
...slots,
|
|
273
273
|
body: AstBuilder.#bodyTextOf(ctx),
|
|
274
274
|
position,
|
|
275
275
|
};
|
|
276
276
|
}
|
|
277
|
+
// {§exec-executor-slot} — the executor may lead the heading or trail the path (once, unambiguous:
|
|
278
|
+
// no other slot after a path uses `[...]`); two executors are the one rejected shape.
|
|
279
|
+
static #executorOf(ctx, pos) {
|
|
280
|
+
const found = ctx.EXECUTOR();
|
|
281
|
+
const list = Array.isArray(found) ? found : found === null || found === undefined ? [] : [found];
|
|
282
|
+
if (list.length > 1) {
|
|
283
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "`### EXEC0` accepts one `[executor]`");
|
|
284
|
+
}
|
|
285
|
+
return list[0]?.getText().slice(1, -1) ?? null;
|
|
286
|
+
}
|
|
277
287
|
static #buildBare(ctx) {
|
|
278
288
|
const position = AstBuilder.#positionOf(ctx);
|
|
279
289
|
return {
|
|
@@ -397,7 +407,7 @@ export default class AstBuilder {
|
|
|
397
407
|
const once = (type, slot) => {
|
|
398
408
|
const found = AstBuilder.#findAll(modCtx, type);
|
|
399
409
|
if (found.length > 1) {
|
|
400
|
-
throw new PlurnkParseError(pos.line, pos.column, "visitor",
|
|
410
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", `\`### EXEC0\` accepts ${slot} at most once`);
|
|
401
411
|
}
|
|
402
412
|
return found[0] ?? null;
|
|
403
413
|
};
|
|
@@ -486,7 +496,7 @@ export default class AstBuilder {
|
|
|
486
496
|
return AstBuilder.#bodyTextOf(ctx) ?? "";
|
|
487
497
|
}
|
|
488
498
|
static #splitDelimiter(headingText, op) {
|
|
489
|
-
const marker = op === "PLAN" ? "
|
|
499
|
+
const marker = op === "PLAN" ? "## " : "### ";
|
|
490
500
|
return headingText.slice(marker.length + op.length);
|
|
491
501
|
}
|
|
492
502
|
static #isDigit(c) {
|
|
@@ -627,7 +637,7 @@ export default class AstBuilder {
|
|
|
627
637
|
if (regex.ok)
|
|
628
638
|
return { dialect: "regex", raw, pattern: regex.pattern, flags: regex.flags };
|
|
629
639
|
if (regex.reason === "invalid" && /^[\t ]/u.test(regex.flags)) {
|
|
630
|
-
throw new PlurnkParseError(pos.line, pos.column, "visitor", "Regex matcher has trailing text after its closing `/`; operation modifiers precede the line ending, and the matcher occupies the next line:
|
|
640
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "Regex matcher has trailing text after its closing `/`; operation modifiers precede the line ending, and the matcher occupies the next line: `### FIND0 (path) <scope>` above, `/pattern/` below.");
|
|
631
641
|
}
|
|
632
642
|
const slashRecovery = regex.reason === "invalid"
|
|
633
643
|
&& regex.detail.includes("Invalid flags supplied")
|