Improved AST parser

This commit is contained in:
2024-07-30 12:48:48 +02:00
parent 265ab988d9
commit 1e7a1399d3
4 changed files with 109 additions and 91 deletions

View File

@ -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(')')