0
我正在使用TinyPG(它是LL1解析器生成器)解析lambda微積分。我試圖編寫一個規則來解析函數應用程序,如(a b)
或(a b c)
等等。使用LL1解析器解析lambda微積分樣式函數應用程序
到目前爲止,我有這個規則(有點簡化):
APPLICATION -> LPARENTHESES VARIABLE (SPACE+ VARIABLE)+ RPARENTHESES;
但是,這會導致解析,左後,右括號前有空格的一個術語:(a b)
。我可以在開頭支架後面留出空格,如下所示:
APPLICATION -> LPARENTHESES SPACE* VARIABLE (SPACE+ VARIABLE)+ RPARENTHESES;
但是我很難將它設置爲允許右括號之前的空格。我想出了這一點,這似乎工作:
ARG_LIST -> (RPARENTHESES | (SPACE+ (RPARENTHESES | (VARIABLE ARG_LIST))));
APPLICATION -> LPARENTHESES SPACE* VARIABLE ARG_LIST;
不過是混亂和遞歸的,那麼這將使它難以閱讀和編寫的節點。有沒有非遞歸或至少更簡單的方法來解析這個?
你看過教程中的空白處理嗎? (搜索'[Skip]') – rici
是的,但是會跳過每一個空格,包括每個參數之間不應該跳過的空格。 – Juan
爲什麼不能跳過?跳過並不意味着「已刪除」:它表示「已識別然後被忽略」。遇到空白字符時,VARIABLE標記仍然會結束。試試看看。 – rici