我正在用 yacc 编写我的第一个解析器。我想解析一个有 3 种“模式”的文件:语句模式表格标题模式表格行模式我希望我的解析器以语句模式开始,然后当它看到由减号组成的行时,切换到表标题模式。当它看到另一行减号时,切换到表格行模式,最后当它看到第三组减号时切换到语句模式:statement...statement...statement...----table heading----table rowtable rowtable row----statementstatementstatement我想到的一件事是,我可以有 3 个单独的语法,我可以在换行循环中切换它们。但是,我不知道如何在一个.y文件中创建多个语法。另一件看起来可能的事情是使用“Lexical Tie-ins”(不幸的是,您必须在文档中搜索该字符串)。然而,yacc 教程的作者并没有真正告诉我关于这些“词法关联”的任何信息,只是说“这种‘后门’方法可以被详细阐述到有害的程度。不过,它代表了一种方式做一些很难做的事情,如果不是不可能做的话。” 这很难令人鼓舞。
1 回答
侃侃尔雅
TA贡献1801条经验 获得超15个赞
我通过创建使用词法分析器插入的伪符号解决了这个问题:
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")
}
;
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消