Comments (4)
If I correctly understand your needs, you have a two ways to do that:
- just use choice operator
Remember, that order of alternatives is important! If one rule is a prefix of other (for example,
decide = integer / word / ... ;
=
and==
) the longest should be the first - you need a some rule that will match your tag and then you can analyze this tag using semantic predicate:
Because probably the tags will uniquely determine the type, the order not so important, but the right order can make grammar faster. Put more expected alternatives first
// returns array [tag_result, rule_result] decide = tag:tag ( &{ return isInteger(tag); } @integer / &{ return isWord(tag); } @word / ... );
from peggy.
Good idea, thanks.
Do you know if I can have in the grammar (I am using CLI to generate my parser at compile time throught npm run build command) a mix of static and dynamic rules?
integer = [0-9]+ // static rule
word = [a-z]i+ // static rule
entry = tag `${some generated rule that makes the grammar}` // dynamic rule generated through javascript code
I understand it is a bit fuzzy but I am new to parser generators. Thanks for the help and patience.
from peggy.
You cannot have ${some generated rule that makes the grammar}
in the grammar itself, but you can generate your grammar before running the CLI. You also could write a plugin that will append necessary rules directly to the AST instead of generating grammar text. If you want, you can even write that plugin in that way, that is would read its input from the same grammar file, so technically your grammar will contain both static and dynamic rules:
{{
// For example, you does not use top-level initializer and
// you decide to write some code inside it for your plugin
}}
integer = [0-9]+ // static rule
word = [a-z]i+ // static rule
// dynamic rules will be injected to the AST by plugin,
// plugin take their input from `ast.topLevelInitializer`
from peggy.
I'm going to close this. Please reopen if there is a concrete feature to request.
from peggy.
Related Issues (20)
- Allow use of an empty array as default value in allowedStartRules option HOT 1
- 4.0.1 dropped support for Node 18 HOT 3
- Implement soft-mode with access to partial results
- Start and end index of matched rule in the source code. HOT 5
- allow await HOT 2
- Code completion for Peggy grammar HOT 3
- posAssertion doesn't work HOT 1
- Add StartRules to .d.ts
- Allow whitespace between plucked word and its pattern
- Failed to run "peggy" on windows, "-S.exe" is missing, what's this? HOT 3
- Proposal to rename `grammarSource` option in parse method to `source` HOT 1
- Infinite repetition in RFCs HOT 3
- Failed to compile grammar containing imports HOT 3
- Grammar with token "constructor" fails to generate HOT 2
- Web tests fail
- Allow es6 plugins from CLI HOT 2
- Clean up rollup hacks in CLI
- Allow ES6 config files
- non-default startRule doesn't work with multiple allowedStartRules HOT 1
- Make rule name available inside action blocks
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from peggy.