2014-04-04 26 views

回答

1

'未定義變量'不是語法錯誤。 Yacc不會生產它。它來自語義分析階段,您必須從頭開始編寫。當然你可以從那裏調用yyerror()。

1

要擴大@ EJP的答案:「我打算用type prin而不是print」,我推斷你正在討論的是yacc生成的解析器的輸入程序,而不是你使用yacc處理的.y文件。解析器。

而在這種情況下,如果標識符在程序中某個特定位置無效,則會引發語法錯誤,並調用yyerror() function(您可以提供)。在該功能中,您可以控制生成的錯誤消息 - 並可以訪問您收集的關於該程序的所有語義信息。例如,考慮prin是一個合法定義的變量,僅僅在語法上不恰當?

0

那麼,你必須有一些方法來定義yacc生成的分析器的輸入程序的變量/函數,對嗎?

如果是這樣,您必須需要symbol table以存儲這些定義,並稍後檢查是否定義了特定變量並打印所需的錯誤消息。

Yacc獨自一人,對此沒有支持。你必須開發你自己的符號表,並找出根據你的需要做到這一點的最佳方法。

相關問題