Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement new PEG parser #154

Merged
merged 46 commits into from
Jul 10, 2024
Merged

feat: implement new PEG parser #154

merged 46 commits into from
Jul 10, 2024

Conversation

plusvic
Copy link
Member

@plusvic plusvic commented Jul 10, 2024

The current parser, based on the pest crate, has been adequate as a starting point but lacks several features that make it unsuitable for specific tasks, such as implementing a language server for YARA that can be integrated into text editors like VSCode.

To implement a language server, we need an error-tolerant parser capable of recovering from syntax errors and continuing to parse the subsequent code. Additionally, this enhancement allows the CLI tool to report multiple syntax errors simultaneously, instead of just one as it currently does.

The new parser is a hand-written PEG parser.

plusvic added 30 commits July 2, 2024 13:55
The existing parser, based in the pest crate, has been good-enough so far, but lacks some features that makes it unsuitable for some tasks, like implementing a language server for YARA that can be integrated in text editors like VSCode.

For implementing a language server we need a parser that is fault-tolerant, recovering from syntax errors as much as possible and parsing the code that comes after the problematic code. As an additional benefit the CLI tool can report multiple syntax errors at once, instead of a single one as it currently does.

The new parser should be faster too.
Formatting error messages every time `unexpected_token_error` was called was a major bottleneck. Many of these error messages are not actually used at all, now the formatting of the error message is deferred to the moment that this error is actually needed.
@plusvic plusvic changed the title feat: implement new parser feat: implement new PEG parser Jul 10, 2024
@plusvic plusvic enabled auto-merge (squash) July 10, 2024 14:40
@plusvic plusvic merged commit c02c620 into main Jul 10, 2024
25 checks passed
@plusvic plusvic deleted the new-parser branch July 10, 2024 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant