12345678910111213141516171819202122232425262728293031323334 |
- package flexgen
- import . "src.eruta.nl/beoran/ll1/common"
- import "src.eruta.nl/beoran/ll1/flexer"
- import "src.eruta.nl/beoran/ll1/ast"
- import . "src.eruta.nl/beoran/ll1/grammar"
- import "src.eruta.nl/beoran/ll1/parser"
- func MakeFlexerGrammar() *Grammar {
- g := &Grammar{}
- keywordsRef := g.AddRule(Ref("keywordsRef", "keywords"))
- dot := g.AddRule(Term("dot", FlexgenKindDot))
- terminal := g.AddRule(Term("terminal", FlexgenKindTerminal))
- arrow := g.AddRule(Term("arrow", FlexgenKindArrow))
- keyword := g.AddRule(Term("arrow", FlexgenKindKeyword))
- keywords := g.AddRule(Opt("keywords", "", And(keyword, keywordsRef)))
- literalString := g.AddRule(Term("literalString", FlexgenKindLiteralString))
- literalRaw := g.AddRule(Term("literalRaw", FlexgenKindLiteralRaw))
- literalChar := g.AddRule(Term("literalChar", FlexgenKindLiteralChar))
- pattern := g.AddRule(Alt("pattern", "", literalString, literalRaw, literalChar))
- lexeme := g.AddRule(Seq("lexeme", "", terminal, arrow, pattern, keywords, dot))
- lexemes := g.AddRule(Seq("lexemes", "", lexeme, End{}))
- top := g.AddRule(Alt("top", "", lexemes))
- g.Top = top
- return g
- }
- /* Parser for the flexer lexer . */
- func MakeFlexerParser() *parser.Parser {
- p := &parser.Parser{}
- p.TokenMapper = parser.DefaultMapper{}
- p.Grammar = *MakeFlexerGrammar()
- return p
- }
|