Giter Club home page Giter Club logo

Comments (6)

Mingun avatar Mingun commented on August 12, 2024

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.

hildjj avatar hildjj commented on August 12, 2024

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.

barsdeveloper avatar barsdeveloper commented on August 12, 2024

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.

hildjj avatar hildjj commented on August 12, 2024
"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.

barsdeveloper avatar barsdeveloper commented on August 12, 2024

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.

hildjj avatar hildjj commented on August 12, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.