說我有這樣的語法(目標語言爲C):檢查可選規則爲空或不
mycmd : cmd_name option? arg1
因爲「選項」是可選的,如果我直接這樣訪問它 -
mycmd : cmd_name option? arg1
{ add_option($option.text); }
該程序會崩潰,所產生的C語言代碼是
add_option(option->getText(option));
這裏的 「選項」 是NULL。
我嘗試以下
mycmd : cmd_name option? arg1
{ if ($option != NULL) { add_option($option.text);} }
這工作得很好。
但我搜索了一下,發現推薦的方法是預先聲明一些布爾,在子規則中將其設置爲true並檢查其值。我不喜歡它,因爲它使語法更難閱讀。
問題是,檢查$ option對NULL是否適合我?還有其他建議的方法,以便我可以將語法和動作分開嗎?
我正在使用ANTLR3.4。
我檢查生成Parser.c,我相信原來的代碼是不正確的 - – 2013-03-03 21:35:19
我檢查生成Parser.c,我相信把可選的子規則內的動作是正確的解決方案,「選項」成爲Parser.c中的一個函數,對NULL進行檢查是沒有意義的。 – 2013-03-03 21:43:14