diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2021-10-02 11:33:40 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2021-10-02 11:33:40 -0700 |
| commit | 304d5c35a8718b2b0f190e53dece6362d14df1b4 (patch) | |
| tree | 37b88c7aeb9eb949ca12b0eb395ebbd31e107d7d /grammars/bp.bp | |
| parent | 44f86084670714c8bb92629b2c6d8cf84fe43acc (diff) | |
Left recursion correctness fixes
Diffstat (limited to 'grammars/bp.bp')
| -rw-r--r-- | grammars/bp.bp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/grammars/bp.bp b/grammars/bp.bp index a6e6f0b..68d1ec8 100644 --- a/grammars/bp.bp +++ b/grammars/bp.bp @@ -17,7 +17,7 @@ String-pattern: ..%(\n / Nodent / Identifier-char / Identifier-start / Escape / pat: simple-pat !(__("!~"/"~")) / suffixed-pat simple-pat: (Upto-and / Dot / Word-boundary/ String / Chars / Nodent / Identifier-char / Identifier-start / Escape-range - / Escape / Repeat / Optional / No / After / Before / Capture / Empty-replacement + / Escape / Repeat / Optional / No / After / Before / Capture / Start-of-File / Start-of-Line / End-of-File / End-of-Line / Ref / parens) suffixed-pat: ( @@ -63,10 +63,11 @@ After: `< __ pat Before: `> __ pat Capture: `@ [__ @capture-name=(id/`!) __ !"=>" `=] __ (@capture=pat / @error=(=>"Expected pattern to capture")) Replace: ( - @replace-pat=(Replace / Chain / pat) __ "=>" (__ @replacement=String / @error=(=>"Expected replacement string")) + @replace-pat=[Chain-noreplace / pat] __ "=>" (__ @replacement=String / @error=(=>"Expected replacement string")) ) +Replace-chain: Replace-chain __ "=>" (__ @replacement=String / @error=(=>"Expected replacement string")) Empty-replacement: ( - @replace-pat=(=>"''") "=>" (__ @replacement=String / @error=(=>"Expected replacement string")) + (=>"EMPTY") @replace-pat=(=>"''") "=>" (__ @replacement=String / @error=(=>"Expected replacement string")) ) Ref: @name=id !(__`:) Start-of-File: "^^" @@ -76,9 +77,10 @@ End-of-Line: "$" parens: `( __ extended-pat (__ `) / @error=(=>"Expected closing parenthesis here")) -Chain: 2+@(pat !(__"=>") / Replace)%__ -Otherwise: 2+@(Replace / Chain / pat)%(__`/__) -extended-pat: Otherwise / Replace / Chain / pat +Chain: @(Replace/pat) __ @(Chain/Replace/pat) +Chain-noreplace: @pat __ @(Chain-noreplace/pat) +Otherwise: 2+@(Chain / Replace / pat)%(__`/__) +extended-pat: Otherwise / Chain / Replace / pat # Special-symbol rules: _: *(` / \t) |
