Сердечное приветствие.
Я изучаю yacc в golang и создал этот файл:
%{
package main
import (
"fmt"
)
%}
%union{
ex string
}
%token <ex> DB OTHER_DB
%%
query: other
|
db
;
db: DB
{
fmt.Printf("\tDB: %s\n", $1 )
}
;
other: OTHER_DB
{
fmt.Printf("\tOTHER_DB: %s\n", $1 )
}
;
%%
type mlex struct {
expr string
result int
}
func (f *mlex) Lex(lval *yySymType) int {
yyErrorVerbose = true
return 0
}
func (f *mlex) Error(s string) {
fmt.Printf("syntax error: %s\n", s)
}
func Parse(expr string) int {
m := &mlex{expr, 0}
yyParse(m)
return m.result
}
, но при его выполнении я получаю эту ошибку:
синтаксическая ошибка: синтаксическая ошибка: неожиданный конец $, ожидание DB или OTHER_DB
Я тестировал этот файл yacc с этим кодом:
package main
import (
"fmt"
)
func main() {
res := Parse("db")
fmt.Println(res)
}
Чтоэто может быть?Нужно ли мне что-нибудь еще в файле yacc?
Я пытаюсь сделать очень простой, полностью функциональный пример, чтобы хорошо его понять.
Спасибо за ваше время.