我正在yacc中编写我的第一个解析器。我想解析一个有3"模式":
的文件我希望我的解析器以语句模式启动,然后当它看到由减号组成的行时,切换到表标题模式。当它看到另一行减号时,切换到表行模式,最后当它看到第三组减号时切换到语句模式:
statement...
statement...
statement...
----
table heading
----
table row
table row
table row
----
statement
statement
statement
我发现的一件事是,我可以有3个单独的语法,我可以在line feed loop之间切换。但是,我不知道如何在一个.y
文件中创建多个语法。
另一件似乎有可能是使用"Lexical Tie-ins"(不幸的是,你必须在文档中搜索该字符串)。然而,yacc教程的作者并没有真正告诉我任何关于这些" lexical tie-ins"除此之外"这种“后门''方法可以被阐述到有害程度。然而,它代表了一种做某些事情的方法,这些事情即使不是不可能也很难做到。"这很难鼓励。
答案 0 :(得分:0)
我通过创建使用词法分析器插入的伪符号解决了这个问题:
line
: TABLE_HEADING sentences ',' table_heading_columns ',' sentences
{
fmt.Println("TABLE_HEADING")
}
| TABLE_BODY table_body_columns
{
fmt.Println("TABLE_BODY")
}
| STATEMENT sentences
{
fmt.Println("STATEMENT")
}
;