Comments (6)
Yes, see the --allowed-start-rules
CLI argument / allowedStartRules
config / API parameter:
$ node .\bin\peggy.js --help
Usage: peggy [options] [input_file]
Arguments:
input_file Grammar file to read. Use "-" to read stdin. (default: "-")
Options:
...
--allowed-start-rules <rules> Comma-separated list of rules the generated parser will be allowed to start parsing from. (Can be specified multiple times) (default: the first rule in the grammar)
...
-S, --start-rule <rule> When testing, use the given rule as the start rule. If this rule is not in the allowed start rules, it will be added.
...
from peggy.
Also of note: you can specify "*"
for the allowed start rules, to allow any rule to be a starter.
I'm going to keep this open in order to make sure the CLI docs say that.
from peggy.
Alright, I've managed to see it with the cli, you need to specify startRule on options arg of the function parse.
Can you please show me where to put the "*" for example on the false rule in the mini grammar on top?
from peggy.
"use strict";
const peggy = require("./");
const { parse } = peggy.generate(`
false = "false" { return false; }
true = "true" { return true; }
boolean = true / false`, {
allowedStartRules: ["*"],
});
console.log(parse("true", { startRule: "boolean" }));
from peggy.
Understood, this is basically the equivalent of the CLI but when generating the grammar at runtime. I hoped there was some way to flag rules in the grammar itself to tell the generator (CLI or peggy.generate) what default starting rules to have.
Let's say I have mygrammar.peggy
*false = "false" { return false; }
true = "true" { return true; }
*boolean = true / false
And I want the starting rule to be either boolean or false. But as I understand this is not currently supported.
from peggy.
You are correct there is currently no mechanism inside the grammar for this, although that's a good idea. When we do rule importing (see #292 for initial work), some rules might be marked as public and others as private, for instance. There are other bits of metadata that might be interesting about rules, such as anticipated types for Typescript output, enabling tracing per-rule, example inputs that get automatically tested, etc.
We could come up with something like ECMAscript/Typescript decorators, have a syntax for comments like JSdoc, or decide that all of this is too complicated for the benefits that might accrue.
In the meantime, just keep an array of the rules you want to be made visible whenver you would have generated a *
prefix, and pass that in where the ['*']
is in my example.
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 1
- 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.