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. - After validation, Grammars and their Rules should be thread safe - use - Unsafe()if required.