Improved AST parser
This commit is contained in:
parent
9e312a3477
commit
fe9585e03f
4 changed files with 109 additions and 91 deletions
|
@ -114,16 +114,16 @@ func (expr *Expression) LastChild() *Expression {
|
|||
}
|
||||
|
||||
// String generates a textual representation of the expression.
|
||||
func (expr *Expression) String(data []byte) string {
|
||||
func (expr *Expression) String(source []byte) string {
|
||||
builder := strings.Builder{}
|
||||
expr.write(&builder, data)
|
||||
expr.write(&builder, source)
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
// write generates a textual representation of the expression.
|
||||
func (expr *Expression) write(builder *strings.Builder, data []byte) {
|
||||
func (expr *Expression) write(builder *strings.Builder, source []byte) {
|
||||
if expr.IsLeaf() {
|
||||
builder.WriteString(expr.Token.Text(data))
|
||||
builder.WriteString(expr.Token.Text(source))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -135,12 +135,12 @@ func (expr *Expression) write(builder *strings.Builder, data []byte) {
|
|||
case token.Array:
|
||||
builder.WriteString("@")
|
||||
default:
|
||||
builder.WriteString(expr.Token.Text(data))
|
||||
builder.WriteString(expr.Token.Text(source))
|
||||
}
|
||||
|
||||
for _, child := range expr.Children {
|
||||
builder.WriteByte(' ')
|
||||
child.write(builder, data)
|
||||
child.write(builder, source)
|
||||
}
|
||||
|
||||
builder.WriteByte(')')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue