我正在学习分词,一个基于golang的解析器。完成本教程后,我决定创建一个简单的数组解析器,这是我的构造。
首先,我需要一个AST来表示这个数组。为了简单起见,我只解析不带引号的字符串数组。(,例如){value1, value_two, value_3_here}
type SimpleArray struct {
Arr []Values `"{" @@* "}"`
}
type Values struct {
Str string `@Ident`
}
现在我为输入字符串创建一个词法分析器
var Lexer = stateful.MustSimple([]stateful.Rule{
{`Ident`, `[a-zA-Z][a-zA-Z_\d]*`, nil},
{`punct`, `[}{,]`, nil},
{`whitespace`, `\s+`, nil},
})
我下面有我的主要功能,有一个简单的测试用例s := "{key, value}"
func main() {
var parser = participle.MustBuild(&SimpleArray{},
participle.Lexer(Lexer),
)
b := &SimpleArray{}
s := "{key, value}"
err := parser.ParseString("", s, b)
if err != nil {panic(err)}
repr.Println(b, repr.Indent(" "), repr.OmitEmpty(true))
}
但我惊慌失措。
panic: 1:2: unexpected token "key"
我认为 in 结构会抓住“密钥”,但事实并非如此,为什么会这样呢?我该如何解决这个问题?@IdentValues
谢谢!