badicsalex / peginator Goto Github PK
View Code? Open in Web Editor NEWPEG parser generator for creating ASTs in Rust
License: MIT License
PEG parser generator for creating ASTs in Rust
License: MIT License
Referencing non-existent rules in fields are only "detected" when trying to compile the generated Rust code.
See #21
Support for more general enumerations.
Helps to reduce some intermediate structures and enhance readability.
For example
CharRulePart = @:CharacterRange | @:CharRangePart | @:Identifier;
CharacterRange = from:CharRangePart ".." to:CharRangePart;
@no_skip_ws
CharRangePart = "'" @:StringItem "'";
Can be equivalent to
@enum
CharRulePart =
@Range | from:CharRangePart ".." to:CharRangePart;
@Part | part:CharRangePart
@Id | id:Identifier;
will generate something like
pub enum CharRulePart {
Range {
from:CharRangePart,
to:CharRangePart
},
Part {
part:CharRangePart
},
Id {
id: Identifier
},
}
Fields and rules that are Rust keywords should be prefixed (or postfixed) with _
See #21
In some languages, something like pest/stack is required.
Used for things like string matching.
If the left side eats r#"
, then the right side needs to match "#
.
If the left side eats r##"
, then the right side needs to match "##
.
More #
and so on.
Can you open the discussion
, I have some non-issue questions to ask.
I am going to write a highlighting and formatting plugin, and I need to bind a extension, what do you think is suitable?
I wonder if there are plans to support precedence climbing like https://docs.rs/peg/latest/peg/#precedence-climbing
I know that peg means never left recursive, but this way of writing does have higher readability.
For traditional peg, this is equivalent to a two-phase parsing
stage-1 attempt to capture
expr = term {infix term}
term = {prefix} atom {postfix}
atom = '(' expr ')' | int | str
stage-2 to reorganization
Vec<atom|prefix|infix|postfix>
using extern progress, e.g. the pratt parser.
The second stage can even be dynamically adjusted by the user(like swift/haskell), and static parsing (parser-embedded) is sufficient for most languages.
I need to force-include characters and keywords (e.g. +, -, ...) in my language. Do I just do @:'-'
to do that, or is there a better way? (I could define each character as it's own rule, and probably will do so, but is there a way I don't know about?)
cargo install peginator_cli
installs a version of the cli that doesn't have --railroad, somehow, even tho the .lock says 0.6.0.
Win|PS> cargo install peginator-cli --force -v
Updating crates.io index
Installing peginator-cli v0.6.0
Updating crates.io index
Compiling proc-macro2 v1.0.78
Compiling windows_x86_64_msvc v0.52.0
Compiling windows_x86_64_msvc v0.48.5
Compiling unicode-ident v1.0.12
Compiling utf8parse v0.2.1
Compiling anstyle v1.0.6
Compiling colorchoice v1.0.0
Compiling anyhow v1.0.79
Compiling lazy_static v1.4.0
Compiling strsim v0.11.0
Compiling heck v0.4.1
Compiling clap_lex v0.7.0
Compiling peginator_codegen v0.6.0
Compiling nohash-hasher v0.2.0
Compiling crc-catalog v2.4.0
Running `rustc --crate-name build_script_build --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\proc-macro2-1.0.78\build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"default\"" --cfg "feature=\"proc-macro\"" -C metadata=3ebaa2fef65fb6f2 -C extra-filename=-3ebaa2fef65fb6f2 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\proc-macro2-3ebaa2fef65fb6f2 -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name build_script_build --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debug-assertions=off -C metadata=c0d855ff3afb1fac -C extra-filename=-c0d855ff3afb1fac --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\windows_x86_64_msvc-c0d855ff3afb1fac -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name build_script_build --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debug-assertions=off -C metadata=ba7ab5c9d2c1dc6a -C extra-filename=-ba7ab5c9d2c1dc6a --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\windows_x86_64_msvc-ba7ab5c9d2c1dc6a -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name unicode_ident --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\unicode-ident-1.0.12\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debug-assertions=off -C metadata=8f4816cee2926e43 -C extra-filename=-8f4816cee2926e43 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name utf8parse --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\utf8parse-0.2.1\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" -C metadata=34c1a0eefb559efe -C extra-filename=-34c1a0eefb559efe --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name anstyle --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anstyle-1.0.6\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" --cfg "feature=\"std\"" -C metadata=483d2c35998d083c -C extra-filename=-483d2c35998d083c --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name colorchoice --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\colorchoice-1.0.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=9cf6539c37109099 -C extra-filename=-9cf6539c37109099 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name unicode_ident --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\unicode-ident-1.0.12\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=f610fcb8c9f51121 -C extra-filename=-f610fcb8c9f51121 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name build_script_build --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anyhow-1.0.79\build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"default\"" --cfg "feature=\"std\"" -C metadata=d7ae6583d17878ad -C extra-filename=-d7ae6583d17878ad --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\anyhow-d7ae6583d17878ad -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name lazy_static C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\lazy_static-1.4.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=d85d8bd228e1d2a7 -C extra-filename=-d85d8bd228e1d2a7 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name strsim C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\strsim-0.11.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=72364aa46624508f -C extra-filename=-72364aa46624508f --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name heck --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\heck-0.4.1\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"default\"" -C metadata=16606336615117e8 -C extra-filename=-16606336615117e8 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name clap_lex --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\clap_lex-0.7.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=063afa6788a3f8cb -C extra-filename=-063afa6788a3f8cb --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name build_script_build --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\peginator_codegen-0.6.0\build.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debug-assertions=off -C metadata=afdcbc9276377e83 -C extra-filename=-afdcbc9276377e83 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\peginator_codegen-afdcbc9276377e83 -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name nohash_hasher --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\nohash-hasher-0.2.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" --cfg "feature=\"std\"" -C metadata=b63b2e0e4705cb62 -C extra-filename=-b63b2e0e4705cb62 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Running `rustc --crate-name crc_catalog --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\crc-catalog-2.4.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=7f60b098934ecc18 -C extra-filename=-7f60b098934ecc18 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow`
Compiling anstyle-parse v0.2.3
Compiling crc v3.0.1
Running `rustc --crate-name crc --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\crc-3.0.1\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=f9edde7a8ba75d66 -C extra-filename=-f9edde7a8ba75d66 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern crc_catalog=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libcrc_catalog-7f60b098934ecc18.rmeta --cap-lints allow`
Running `rustc --crate-name anstyle_parse --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anstyle-parse-0.2.3\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" --cfg "feature=\"utf8\"" -C metadata=70c07834aea22d76 -C extra-filename=-70c07834aea22d76 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern utf8parse=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libutf8parse-34c1a0eefb559efe.rmeta --cap-lints allow`
Running `C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\windows_x86_64_msvc-ba7ab5c9d2c1dc6a\build-script-build`
Running `C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\windows_x86_64_msvc-c0d855ff3afb1fac\build-script-build`
Running `rustc --crate-name windows_x86_64_msvc --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=329dbc82266ac467 -C extra-filename=-329dbc82266ac467 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Running `C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\peginator_codegen-afdcbc9276377e83\build-script-build`
Running `C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\proc-macro2-3ebaa2fef65fb6f2\build-script-build`
Running `C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\proc-macro2-3ebaa2fef65fb6f2\build-script-build`
Running `rustc --crate-name windows_x86_64_msvc --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=c30a9f2db5e7c5c9 -C extra-filename=-c30a9f2db5e7c5c9 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Compiling windows-targets v0.48.5
Running `rustc --crate-name windows_targets --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows-targets-0.48.5\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=7a226fbd6adea308 -C extra-filename=-7a226fbd6adea308 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern windows_x86_64_msvc=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_x86_64_msvc-329dbc82266ac467.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Compiling windows-targets v0.52.0
Running `rustc --crate-name windows_targets --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows-targets-0.52.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=689f0c355e02f5fa -C extra-filename=-689f0c355e02f5fa --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern windows_x86_64_msvc=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_x86_64_msvc-c30a9f2db5e7c5c9.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Compiling windows-sys v0.48.0
Running `rustc --crate-name windows_sys --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows-sys-0.48.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"Win32\"" --cfg "feature=\"Win32_Foundation\"" --cfg "feature=\"Win32_System\"" --cfg "feature=\"Win32_System_Console\"" --cfg "feature=\"default\"" -C metadata=4d941b30bc3bbdb2 -C extra-filename=-4d941b30bc3bbdb2 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern windows_targets=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_targets-7a226fbd6adea308.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Running `C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\build\anyhow-d7ae6583d17878ad\build-script-build`
Compiling windows-sys v0.52.0
Running `rustc --crate-name windows_sys --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows-sys-0.52.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"Win32\"" --cfg "feature=\"Win32_Foundation\"" --cfg "feature=\"Win32_System\"" --cfg "feature=\"Win32_System_Console\"" --cfg "feature=\"default\"" -C metadata=08a978065374b929 -C extra-filename=-08a978065374b929 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern windows_targets=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_targets-689f0c355e02f5fa.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Running `rustc --crate-name proc_macro2 --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\proc-macro2-1.0.78\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" --cfg "feature=\"proc-macro\"" -C metadata=26d314d20bb5b42b -C extra-filename=-26d314d20bb5b42b --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern unicode_ident=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libunicode_ident-f610fcb8c9f51121.rmeta --cap-lints allow --cfg wrap_proc_macro`
Running `rustc --crate-name proc_macro2 --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\proc-macro2-1.0.78\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"default\"" --cfg "feature=\"proc-macro\"" -C metadata=a533a3aae3770938 -C extra-filename=-a533a3aae3770938 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern unicode_ident=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libunicode_ident-8f4816cee2926e43.rmeta --cap-lints allow --cfg wrap_proc_macro`
Running `rustc --crate-name anyhow --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anyhow-1.0.79\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" --cfg "feature=\"std\"" -C metadata=8ad1f341ff3c6a44 -C extra-filename=-8ad1f341ff3c6a44 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --cap-lints allow --cfg std_backtrace`
Compiling quote v1.0.35
Running `rustc --crate-name quote --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\quote-1.0.35\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"default\"" --cfg "feature=\"proc-macro\"" -C metadata=63abacd430c8d516 -C extra-filename=-63abacd430c8d516 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern proc_macro2=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libproc_macro2-a533a3aae3770938.rmeta --cap-lints allow`
Running `rustc --crate-name quote --edition=2018 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\quote-1.0.35\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"default\"" --cfg "feature=\"proc-macro\"" -C metadata=4c4d233b09e57a8a -C extra-filename=-4c4d233b09e57a8a --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern proc_macro2=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libproc_macro2-26d314d20bb5b42b.rmeta --cap-lints allow`
Compiling syn v2.0.48
Running `rustc --crate-name syn --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\syn-2.0.48\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"clone-impls\"" --cfg "feature=\"default\"" --cfg "feature=\"derive\"" --cfg "feature=\"full\"" --cfg "feature=\"parsing\"" --cfg "feature=\"printing\"" --cfg "feature=\"proc-macro\"" --cfg "feature=\"quote\"" -C metadata=7917983e38f0b6b0 -C extra-filename=-7917983e38f0b6b0 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern proc_macro2=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libproc_macro2-a533a3aae3770938.rmeta --extern quote=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libquote-63abacd430c8d516.rmeta --extern unicode_ident=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libunicode_ident-8f4816cee2926e43.rmeta --cap-lints allow`
Compiling colored v2.1.0
Running `rustc --crate-name colored --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\colored-2.1.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=ad2dddf83bab9287 -C extra-filename=-ad2dddf83bab9287 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern lazy_static=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\liblazy_static-d85d8bd228e1d2a7.rmeta --extern windows_sys=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_sys-4d941b30bc3bbdb2.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Compiling anstyle-query v1.0.2
Compiling anstyle-wincon v3.0.2
Running `rustc --crate-name anstyle_query --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anstyle-query-1.0.2\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=b5e1eaca2f49da81 -C extra-filename=-b5e1eaca2f49da81 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern windows_sys=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_sys-08a978065374b929.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Running `rustc --crate-name anstyle_wincon --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anstyle-wincon-3.0.2\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=0894472cecace596 -C extra-filename=-0894472cecace596 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern anstyle=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstyle-483d2c35998d083c.rmeta --extern windows_sys=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libwindows_sys-08a978065374b929.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Compiling peginator v0.6.0
Running `rustc --crate-name peginator --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\peginator-0.6.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"colored\"" --cfg "feature=\"default\"" -C metadata=0caac08f08faf405 -C extra-filename=-0caac08f08faf405 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern colored=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libcolored-ad2dddf83bab9287.rmeta --extern nohash_hasher=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libnohash_hasher-b63b2e0e4705cb62.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Compiling anstream v0.6.11
Running `rustc --crate-name anstream --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\anstream-0.6.11\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"auto\"" --cfg "feature=\"default\"" --cfg "feature=\"wincon\"" -C metadata=c6bac3934c839d15 -C extra-filename=-c6bac3934c839d15 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern anstyle=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstyle-483d2c35998d083c.rmeta --extern anstyle_parse=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstyle_parse-70c07834aea22d76.rmeta --extern anstyle_query=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstyle_query-b5e1eaca2f49da81.rmeta --extern anstyle_wincon=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstyle_wincon-0894472cecace596.rmeta --extern colorchoice=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libcolorchoice-9cf6539c37109099.rmeta --extern utf8parse=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libutf8parse-34c1a0eefb559efe.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Running `rustc --crate-name peginator_codegen --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\peginator_codegen-0.6.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=9099b82bed6a539d -C extra-filename=-9099b82bed6a539d --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern anyhow=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanyhow-8ad1f341ff3c6a44.rmeta --extern colored=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libcolored-ad2dddf83bab9287.rmeta --extern crc=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libcrc-f9edde7a8ba75d66.rmeta --extern peginator=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libpeginator-0caac08f08faf405.rmeta --extern proc_macro2=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libproc_macro2-26d314d20bb5b42b.rmeta --extern quote=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libquote-4c4d233b09e57a8a.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Compiling clap_builder v4.5.0
Running `rustc --crate-name clap_builder --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\clap_builder-4.5.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"color\"" --cfg "feature=\"error-context\"" --cfg "feature=\"help\"" --cfg "feature=\"std\"" --cfg "feature=\"suggestions\"" --cfg "feature=\"usage\"" -C metadata=97d0c68bb526ec38 -C extra-filename=-97d0c68bb526ec38 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern anstream=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstream-c6bac3934c839d15.rmeta --extern anstyle=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanstyle-483d2c35998d083c.rmeta --extern clap_lex=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libclap_lex-063afa6788a3f8cb.rmeta --extern strsim=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libstrsim-72364aa46624508f.rmeta --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Compiling clap_derive v4.5.0
Running `rustc --crate-name clap_derive --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\clap_derive-4.5.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type proc-macro --emit=dep-info,link -C prefer-dynamic -C embed-bitcode=no -C debug-assertions=off --cfg "feature=\"default\"" -C metadata=2f5c544c8fa61e08 -C extra-filename=-2f5c544c8fa61e08 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern heck=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libheck-16606336615117e8.rlib --extern proc_macro2=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libproc_macro2-a533a3aae3770938.rlib --extern quote=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libquote-63abacd430c8d516.rlib --extern syn=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libsyn-7917983e38f0b6b0.rlib --extern proc_macro --cap-lints allow`
Compiling clap v4.5.0
Running `rustc --crate-name clap --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\clap-4.5.0\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no --cfg "feature=\"color\"" --cfg "feature=\"default\"" --cfg "feature=\"derive\"" --cfg "feature=\"error-context\"" --cfg "feature=\"help\"" --cfg "feature=\"std\"" --cfg "feature=\"suggestions\"" --cfg "feature=\"usage\"" -C metadata=94cfc3645300b6f1 -C extra-filename=-94cfc3645300b6f1 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern clap_builder=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libclap_builder-97d0c68bb526ec38.rmeta --extern clap_derive=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\clap_derive-2f5c544c8fa61e08.dll --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib`
Compiling peginator-cli v0.6.0
Running `rustc --crate-name peginator_cli --edition=2021 C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\peginator-cli-0.6.0\src\main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=279 --crate-type bin --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=e0c6dc4716e4c785 -C extra-filename=-e0c6dc4716e4c785 --out-dir C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps -L dependency=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps --extern anyhow=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libanyhow-8ad1f341ff3c6a44.rlib --extern clap=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libclap-94cfc3645300b6f1.rlib --extern colored=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libcolored-ad2dddf83bab9287.rlib --extern peginator=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libpeginator-0caac08f08faf405.rlib --extern peginator_codegen=C:\Users\OLIVER~1.SMI\AppData\Local\Temp\cargo-installXxx982\release\deps\libpeginator_codegen-9099b82bed6a539d.rlib --cap-lints allow -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.52.0\lib -L native=C:\Users\oliver.smith\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows_x86_64_msvc-0.48.5\lib`
Finished release [optimized] target(s) in 20.39s
Replacing C:\Users\oliver.smith\.cargo\bin\peginator-cli.exe
Replaced package `peginator-cli v0.6.0` with `peginator-cli v0.6.0` (executable `peginator-cli.exe`)
peginator-cli.exe -V
peginator-cli 0.6.0
peginator-cli.exe --help
Command line interface for peginator (a PEG parser generator)
Usage: peginator-cli.exe [OPTIONS] <GRAMMAR_FILE>
Arguments:
<GRAMMAR_FILE>
Options:
-a, --ast-only Print the parsed AST and exit
-t, --trace Trace rule matching
-d, --derives <DERIVES> Use a custom set of derives for the generated types
-h, --help Print help
-V, --version Print version
This proposal introduces the automatic rule inlining (where productions are inlined given certain conditions) and rules are type-deduced given another set of conditions. In particular, I think a singular condition (or if we want this to have multiple conditions later, a basic set of them) should be good to start with.
My proposal is that:
DefaultExpression = expr:Expression;
, the generator should automatically inline this rule, since creating a new node for this would be pointless and would just waste LoC and memory. Automatic inlining would still not occur if this rule was extended in the future. RequeueStatement = Requeue name:Name [require_abort:RequeueAbortRequirement] ";";
RequeueAbortRequirement = With Abort;
RequeueAbortRequirement
resolves to nothing (With
and Abort
are dropped), so again creating a separate struct for this would be pointless. Instead, require_abort
should just be a boolean (was With
and Abort
found or not) in the generated struct.Thoughts?
My identifiers are defined as follows:
@string
@no_skip_ws
Ident = (XID_START | '_') (XID_CONTINUE)*
where XID_START
represents an external function UnicodeXID::is_xid_start.
How should I capture my Ident
token?
I'm very confused. The peginator-cli binary is giving me this error:
Error: expected end of input
--> ada.peg:6801:1
|
|
| ^
But my grammar certainly isn't done on this line (the number of lines are primarily because I generated the unicode character classes that I needed to match.... Probably not the "best" way I could do it, but it (should) work.) Anyway, it's getting stuck on this:
@string
@check(crate::checks::check_identifier)
Identifier =
IdentifierStart {IdentifierStart | IdentifierExtend} !(Abort | Abs | Abstract | Accept | Access | Aliased | All | And | Array | At | Begin | Body | Case | Constant | Declare | Delay | Delta | Digits | Do | Else | Elsif | End | Entry | Exception | Exit | For | Function | Generic | Goto | If | In | Interface | Is | Limited | Loop | Mod | New | Not | Null | Of | Or | Others | Out | Overriding | Package | Parallel | Pragma | Private | Procedure | Protected | Raise | Range | Record | Rem | Renames | Requeue | Return | Reverse | Select | Separate | Some | Subtype | Synchronized | Tagged | Task | Terminate | Then | Type | Until | Use | When | While | With | Xor);
@char
IdentifierStart =UppercaseLetter
| LowercaseLetter
| TitlecaseLetter
| ModifierLetter
| OtherLetter
| LetterNumber;
@char
IdentifierExtend =NonspacingMark
| SpacingMark
| DecimalNumber
| ConnectorPunctuation;
NumericLiteral = @:DecimalLiteral | @:BasedLiteral;
# Dies where this comment is
@skip_no_ws
@check(crate::checks::check_decimal_literal)
DecimalLiteral = integer_part:Numeral ["." fractional_part:Numeral] [exponent:Exponent];
@string
@skip_no_ws
Numeral = Digit {["_"] Digit};
@string
@skip_no_ws
Exponent = i'E' [Add] Numeral | i'E' Subtract Numeral;
@char
Digit = '0' .. '9';
@check(crate::checks::check_based_literal)
BasedLiteral =
base:Base "#" integer_part:BasedNumeral ["." fractional_part:BasedNumeral] "#" [exponent:Exponent];
@string
@skip_no_ws
Base = Numeral;
@string
@skip_no_ws
BasedNumeral =
ExtendedDigit {["_"] ExtendedDigit};
@char
ExtendedDigit = Digit | i'A' .. i'F';
At a glance I can't see any kind of syntax error, so I'm quite confused. Does order of the rules matter? (I hope not...)
All field names that are not Rust keywords should be allowed during parsing. Either prefix internal stuff with __
, or prefix the temporaries with something.
See #21
Duplicate rule names are only "detected" when trying to compile the generated Rust code.
See #21
The inline rule is a phantom node.
If a node is too long or appears multiple times, the inline rule can be extracted.
For example:
Suppose the syntax ~rule
is used.
assign_statement ::=
| LET "(" ~assign_name ")" type_hint? SET assign_rhs eos?
| LET "(" ~assign_name ")" type_hint? eos?
| LET ~assign_name SET assign_rhs eos?
| LET ~assign_name eos
assign_name ::= pair:assign_pair (Comma pair:assign_pair)* Comma?
assign_pair ::= MODIFIERS* Symbol type_hint?
assign_rhs ::= if_statement|match_statement|expr
LET ::= "let"
SET ::= "="
Equivalent to
assign_statement ::=
| LET "(" pair:assign_pair (Comma pair:assign_pair)* Comma? ")" type_hint? SET assign_rhs eos?
| LET "(" pair:assign_pair (Comma pair:assign_pair)* Comma? ")" type_hint? eos?
| LET pair:assign_pair (Comma pair:assign_pair)* Comma? SET assign_rhs eos?
| LET pair:assign_pair (Comma pair:assign_pair)* Comma? eos
// Ideally assign_name should be cleaned up by dead code elimination
Now that >
was implemented, there will be rules that are unused by any externally available parsing functions. The parsers and types for these should not be emitted, as they only cause confusion.
So how to make indentation that will track when it's INDENT and DEDENT and can use it easily with the grammar?
See #19 (comment)
peg side
@position
@extern(crate::utils::unicode_whitespace)
UnicodeSpace;
rust side
pub fn unicode_whitespace(input: &str) -> Result<(&str, usize), &'static str> {
let mut length = 0;
for char in input.chars() {
if char.is_whitespace() { length += char.len_utf8() } else { break }
}
if length == 0 { Err("Not unicode whitespace") } else { Ok((&input[0..length], length)) }
}
except:
start offset + length offset
actual:
Caused by:
process didn't exit successfully: `target\debug\build\saha-parser-579f728ace3fbfac\build-script-build` (exit code: 101)
--- stderr
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: expected character from character class IdentifierChar
--> src/parser.peg:54:1
|
| @position
| ^
', projects\saha-parser\build.rs:7:77
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
How about support @position
for all rule?
The current string char and enum cannot mark positions.
For enum, just call position directly on all variants, the rust compiler will prompt which variants do not mark the position and report an error.
For string/char, position is also necessary, I want to report which escaped char fails and which identifier is undefined with position.
The hacking I am currently using is
@position
Identifier = identifier:IDENTIFIER;
@string
@no_skip_ws
IDENTIFIER = (XID_START | '_') {XID_CONTINUE};
But I think I can generate the Identifier directly
@position
@string
@no_skip_ws
Identifier = (XID_START | '_') {XID_CONTINUE};
Leads to
pub struct Identifier {
pub string: String,
pub position: Range<usize>
}
#3 implies that there is a need for case-insensitive string matching (for keywords, probably).
There should probably be an easy, but intuitive syntax to do it (e.g. i"whatever"
). I'll look into how other PEG parsers mark it.
Implement left recursion (using a new @leftrec
directive), similarly to this post:
https://medium.com/@gvanrossum_83706/left-recursive-peg-grammars-65dab3c580e1
Idk if this is a bug or I'm doing something wrong, but it definitely looks like a bug. When I do the following:
@leftrec
Name = @:DirectName | @:ExplicitDereference
| @:IndexedComponent | @:Slice
| @:SelectedComponent | AttributeReference:*AttributeReference
| @:TypeConversion | @:FunctionCall
| @:CharacterLiteral | @:QualifiedExpression
| @:GeneralizedReference | @:GeneralizedIndexing
| @:TargetName;
The resulting parser generates the wrong code:
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Name {
pub _override: Option<Name__override>,
pub AttributeReference: Option<Box<AttributeReference>>,
}
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Name__override {
CharacterLiteral(CharacterLiteral),
DirectName(DirectName),
ExplicitDereference(ExplicitDereference),
FunctionCall(FunctionCall),
GeneralizedIndexing(GeneralizedIndexing),
GeneralizedReference(GeneralizedReference),
IndexedComponent(IndexedComponent),
QualifiedExpression(QualifiedExpression),
SelectedComponent(SelectedComponent),
Slice(Slice),
TargetName(TargetName),
TypeConversion(TypeConversion),
}
I think that, in general, an all-choices rule should always generate an enum -- it should never generate a struct, since that creates error-prone code.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.