simplify generated output

This commit is contained in:
Arpad Ryszka 2018-01-06 20:30:00 +01:00
parent 68ce88cc6f
commit eb8250c311
5 changed files with 701 additions and 654 deletions

View File

@ -89,21 +89,30 @@ func (p *charParser) generate(w io.Writer, done map[string]bool) error {
}
fprintf("var p%d = charParser{", p.id)
fprintf("id: %d, not: %t,", p.id, p.not)
fprintf("chars: []rune{")
for i := range p.chars {
fprintf("%d,", p.chars[i])
fprintf("id: %d,", p.id)
if p.not {
fprintf("not: true,")
}
fprintf("},")
if len(p.chars) > 0 {
fprintf("chars: []rune{")
for i := range p.chars {
fprintf("%d,", p.chars[i])
}
fprintf("ranges: [][]rune{")
for i := range p.ranges {
fprintf("{%d, %d},", p.ranges[i][0], p.ranges[i][1])
fprintf("},")
}
fprintf("}};")
if len(p.ranges) > 0 {
fprintf("ranges: [][]rune{")
for i := range p.ranges {
fprintf("{%d, %d},", p.ranges[i][0], p.ranges[i][1])
}
fprintf("},")
}
fprintf("};")
return err
}

View File

@ -157,29 +157,37 @@ func (p *choiceParser) generate(w io.Writer, done map[string]bool) error {
fprintf("var p%d = choiceParser{", p.id)
fprintf("id: %d, commit: %d,", p.id, p.commit)
if p.commitType()&userDefined != 0 {
fprintf("name: \"%s\",", p.name)
}
fprintf("generalizations: []int{")
for i := range p.generalizations {
fprintf("%d,", p.generalizations[i])
}
fprintf("}};")
for i := range p.options {
if err := p.options[i].(generator).generate(w, done); err != nil {
return err
if len(p.generalizations) > 0 {
fprintf("generalizations: []int{")
for i := range p.generalizations {
fprintf("%d,", p.generalizations[i])
}
}
fprintf("p%d.options = []parser{", p.id)
for i := range p.options {
fprintf("&p%d,", p.options[i].nodeID())
fprintf("},")
}
fprintf("};")
if len(p.options) > 0 {
for i := range p.options {
if err := p.options[i].(generator).generate(w, done); err != nil {
return err
}
}
fprintf("p%d.options = []parser{", p.id)
for i := range p.options {
fprintf("&p%d,", p.options[i].nodeID())
}
fprintf("};")
}
return err
}
@ -201,23 +209,27 @@ func (b *choiceBuilder) generate(w io.Writer, done map[string]bool) error {
fprintf("var b%d = choiceBuilder{", b.id)
fprintf("id: %d, commit: %d,", b.id, b.commit)
if b.commit&Alias == 0 {
fprintf("name: \"%s\",", b.name)
}
fprintf("};")
for i := range b.options {
if err := b.options[i].(generator).generate(w, done); err != nil {
return err
if len(b.options) > 0 {
for i := range b.options {
if err := b.options[i].(generator).generate(w, done); err != nil {
return err
}
}
fprintf("b%d.options = []builder{", b.id)
for i := range b.options {
fprintf("&b%d,", b.options[i].nodeID())
}
fprintf("};")
}
fprintf("b%d.options = []builder{", b.id)
for i := range b.options {
fprintf("&b%d,", b.options[i].nodeID())
}
fprintf("};")
return err
}

View File

@ -4,7 +4,7 @@ package treerack
// only to the source code generated with treerack.
const gendoc = `
/*
This file was generated by treerack (https://github.com/aryszka/treerack).
This file was generated with treerack (https://github.com/aryszka/treerack).
The contents of this file fall under different licenses.

File diff suppressed because it is too large Load Diff

View File

@ -296,37 +296,51 @@ func (p *sequenceParser) generate(w io.Writer, done map[string]bool) error {
}
fprintf("var p%d = sequenceParser{", p.id)
fprintf("id: %d, commit: %d, allChars: %t,", p.id, p.commit, p.allChars)
fprintf("id: %d, commit: %d,", p.id, p.commit)
if p.commit&userDefined != 0 {
fprintf("name: \"%s\",", p.name)
}
fprintf("ranges: [][]int{")
for i := range p.ranges {
fprintf("{%d, %d},", p.ranges[i][0], p.ranges[i][1])
if p.allChars {
fprintf("allChars: true,")
}
fprintf("},")
fprintf("generalizations: []int{")
for i := range p.generalizations {
fprintf("%d,", p.generalizations[i])
}
fprintf("}};")
for i := range p.items {
if err := p.items[i].(generator).generate(w, done); err != nil {
return err
if len(p.ranges) > 0 {
fprintf("ranges: [][]int{")
for i := range p.ranges {
fprintf("{%d, %d},", p.ranges[i][0], p.ranges[i][1])
}
fprintf("},")
}
fprintf("p%d.items = []parser{", p.id)
for i := range p.items {
fprintf("&p%d,", p.items[i].nodeID())
if len(p.generalizations) > 0 {
fprintf("generalizations: []int{")
for i := range p.generalizations {
fprintf("%d,", p.generalizations[i])
}
fprintf("},")
}
fprintf("};")
if len(p.items) > 0 {
for i := range p.items {
if err := p.items[i].(generator).generate(w, done); err != nil {
return err
}
}
fprintf("p%d.items = []parser{", p.id)
for i := range p.items {
fprintf("&p%d,", p.items[i].nodeID())
}
fprintf("};")
}
return err
}
@ -347,29 +361,41 @@ func (b *sequenceBuilder) generate(w io.Writer, done map[string]bool) error {
}
fprintf("var b%d = sequenceBuilder{", b.id)
fprintf("id: %d, commit: %d, allChars: %t,", b.id, b.commit, b.allChars)
fprintf("id: %d, commit: %d,", b.id, b.commit)
if b.commit&Alias == 0 {
fprintf("name: \"%s\",", b.name)
}
fprintf("ranges: [][]int{")
for i := range b.ranges {
fprintf("{%d, %d},", b.ranges[i][0], b.ranges[i][1])
if b.allChars {
fprintf("allChars: true,")
}
fprintf("}};")
for i := range b.items {
if err := b.items[i].(generator).generate(w, done); err != nil {
return err
if len(b.ranges) > 0 {
fprintf("ranges: [][]int{")
for i := range b.ranges {
fprintf("{%d, %d},", b.ranges[i][0], b.ranges[i][1])
}
}
fprintf("b%d.items = []builder{", b.id)
for i := range b.items {
fprintf("&b%d,", b.items[i].nodeID())
fprintf("},")
}
fprintf("};")
if len(b.items) > 0 {
for i := range b.items {
if err := b.items[i].(generator).generate(w, done); err != nil {
return err
}
}
fprintf("b%d.items = []builder{", b.id)
for i := range b.items {
fprintf("&b%d,", b.items[i].nodeID())
}
fprintf("};")
}
return err
}