classafPegger::Grammar
sys::Obj afPegger::Grammar
@Js
(Advanced) Use to programmatically define PEG rules.
Rules may be used before they, themselves are defined:
grammar := Grammar()
grammar["a"] := Rules.sequence { grammar["b"], grammar["c"], }
grammar["b"] := Rules.zeroOrMore(Rules.spaceChar)
grammar["c"] := Rules.oneOrMore(Rules.alphaNumChar)
Sometimes it's easier to hold rules in local variables:
grammar := Grammar()
a            := grammar["a"]
b            := grammar["b"]
c            := grammar["c"]
grammar["a"] := Rules.sequence { b, c, }
grammar["b"] := Rules.zeroOrMore(Rules.spaceChar)
grammar["c"] := Rules.oneOrMore(Rules.alphaNumChar)
All named rules must be defined before the grammar is used.
It is not mandatory to use the Grammar class to create rules and grammars, but it is usually easier.
- definition
 Str definition()Pretty prints the grammar definition.
- get
 Returns the named rule, or creates a proxy if it doesn't exist.
- parseGrammar
 static Grammar parseGrammar(Str grammar)Parses grammar definitions, and returns the root rule (if given) or the first rule parsed. For example:
Grammar.fromDefs("a <- [abc] / [xyz] / b b <- \space+ [^abc]")See Peg.parseGrammar
- rules
 Rule[] rules()Returns all the named rules.
- set
 @Operator
Rule set(Str name, Rule rule)Sets the real implementation / definition of the named rule.
- validate
 This validate()Validates that all named rules have been defined.