aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--grammars/bpeg.bp39
1 files changed, 19 insertions, 20 deletions
diff --git a/grammars/bpeg.bp b/grammars/bpeg.bp
index 4855255..e8d7259 100644
--- a/grammars/bpeg.bp
+++ b/grammars/bpeg.bp
@@ -1,23 +1,22 @@
# This is a file defining the BP grammar using BP syntax
-Grammar: __ *(Def [__`;])%__ __ ($$ / @!=(..%\n => "Could not parse this code"))
-Def: @name=id _ `: __ (
+Grammar: __ *(Def [__`;])%__ __ ($$ / @!=(..$$%\n => "Could not parse this code"))
+Def: @name=id __ `: __ (
@definition=extended-pat
/ $$ @!=(''=>"No definition for rule")
/ @!=(..>(`;/id_`:/$)%\n => "Invalid definition: @0"))
# This is used for command line arguments:
-String-pattern: .. % (\n / Nodent / Escape / `\ pat [`;])
+String-pattern: ..$$ % (\n / Nodent / Escape / `\ pat [`;])
-pat: simple-pat !(__("!="/"=="/"=>")) / suffixed-pat
+pat: simple-pat !(__("!="/"==")) / suffixed-pat
simple-pat: Upto-and / Dot / String / Chars / Nodent / Escape-range
- / Escape / Repeat / Optional / After / Before / Capture
+ / Escape / Repeat / Optional / No / After / Before / Capture
/ Ref / parens
suffixed-pat: (
Eq-pat
/ Not-eq-pat
- / Replace
)
Eq-pat: @first=pat__"=="__@second=pat
@@ -28,7 +27,7 @@ String: (
`" @s=*(Escape / !`".) (`" / @!=(''=> "Expected closing quote here"))
/ `' @s=*(Escape / !`'.) (`' / @!=(''=> "Expected closing quote here"))
)
-Chars: `` @+(Char/Char-range) % `,
+Chars: `` @+(Char-range/Char) % `,
Char-range: @low=. `- (@high=. / @!=(''=> "Expected a second character to form a character range"))
Char: (@s=. / @!=(''=> "Expected a character following the '`'"))
Escape-range: `\ @low=escape-sequence `- @high=escape-sequence
@@ -41,29 +40,29 @@ escape-sequence: (
/ 1-3 `0-7
/ `x 2 `0-9,a-f,A-F
)
-No: `! (_@pat / @!=(''=>"Expected a pattern after the exclamation mark"))
+No: `! (__@pat / @!=(''=>"Expected a pattern after the exclamation mark"))
Nodent: `\ `N
-Upto-and: 2-3`. [_@first=simple-pat] [__`%__@second=simple-pat]
+Upto-and: ".." [__@first=simple-pat] [__`%__@second=simple-pat]
Repeat: (
- @min='' `* @max=''
- / @min=int _ `- _ @max=int
- / @min=int _ `+ @max=''
+ @min=(''=>'0') `* @max=''
+ / @min=int __ `- __ @max=int
+ / @min=(int / ''=>'1') __ `+ @max=''
/ @min=@max=int
) __ @repeat-pat=pat [__`%__@sep=pat]
Optional: `[ __ extended-pat (__`] / @!=(''=> "Expected closing square bracket here"))
-After: `< _ pat
-Before: `> _ pat
-Capture: `@ [_ @capture-name=(id/`!) __ !"=>" `=] __ (@capture=pat / @!=(''=> "Expected pattern to capture"))
+After: `< __ pat
+Before: `> __ pat
+Capture: `@ [__ @capture-name=(id/`!) __ !"=>" `=] __ (@capture=pat / @!=(''=> "Expected pattern to capture"))
Replace: (
- @replace-pat=pat __ "=>" (__ @replacement=String / @!=(''=> "Expected replacement string"))
+ @replace-pat=(Replace / Chain / pat) __ "=>" (__ @replacement=String / @!=(''=> "Expected replacement string"))
)
-Ref: @name=id !(_`:)
+Ref: @name=id !(__`:)
parens: `( __ extended-pat (__ `) / @!=(''=> "Expected closing parenthesis here"))
-Chain: 2+@pat%__
-Otherwise: 2+@(Chain/pat)%(__`/__)
-extended-pat: Otherwise / Chain / pat
+Chain: 2+@(pat !(__"=>") / Replace)%__
+Otherwise: 2+@(Replace / Chain / pat)%(__`/__)
+extended-pat: Otherwise / Replace / Chain / pat
# Special-symbol rules:
_: *(` / \t)