我正在用 yacc 編寫我的第一個解析器。我想解析一個有 3 種“模式”的文件:語句模式表格標題模式表格行模式我希望我的解析器以語句模式開始,然后當它看到由減號組成的行時,切換到表標題模式。當它看到另一行減號時,切換到表格行模式,最后當它看到第三組減號時切換到語句模式:statement...statement...statement...----table heading----table rowtable rowtable row----statementstatementstatement我想到的一件事是,我可以有 3 個單獨的語法,我可以在換行循環中切換它們。但是,我不知道如何在一個.y文件中創建多個語法。另一件看起來可能的事情是使用“Lexical Tie-ins”(不幸的是,您必須在文檔中搜索該字符串)。然而,yacc 教程的作者并沒有真正告訴我關于這些“詞法關聯”的任何信息,只是說“這種‘后門’方法可以被詳細闡述到有害的程度。不過,它代表了一種方式做一些很難做的事情,如果不是不可能做的話?!?這很難令人鼓舞。
1 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
我通過創建使用詞法分析器插入的偽符號解決了這個問題:
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 關注
- 124 瀏覽
添加回答
舉報
0/150
提交
取消