1
我已經使用顯式堆棧以非遞歸方法實現了LL1分析器。關於LL1非遞歸語法分析器中的AST構造
下面的算法是從龍書:
set zp to point to the first symbol of w;
set X to the top stack symbol;
while (X != $) { /* stack is not empty */
if (X is a)
pop the stack and advance zp;
else if (X is a terminal)
error();
else if (M[X, a] is an error entry)
error();
else if (M[X,a] = X -+ Y1Y2 Yk) {
output the production X -+ YlY2 - . Yk;
pop the stack;
push Yk, Yk-1,. . . , Yl onto the stack, with Yl on top;
set X to the top stack symbol;
}
書中說:
解析器是由認爲X,符號上 頂部堆疊的程序控制,和a,當前輸入符號。如果X是非終結符號 ,則解析器通過查詢條目 M [X,a]的解析表IM來選擇X生產。 (此處可以執行其他代碼 ,例如,在分析樹中構造節點的代碼)。 否則,它會檢查終端X和當前輸入符號a之間的匹配。
但是我需要更多關於如何在這種方法下構建表達式樹節點的信息。我有UnaryOperator,BinaryOperator等節點層次結構,但不知道在哪裏實例化它。
但我還沒有找到任何簡單的例子(例如算術語言)。