0
我目前正在嘗試實現以文本電子表格作爲輸入(每個「單元」由選項卡分隔)的Antlr v4語法。語法支持引用其他單元格,包括在算術表達式中使用的引用。輸出與輸入相同,但所有表達式都已完成,每個引用都被引用的單元格的整數值替換。Antlr:引用尚未解析的數據
例輸入:
1 9 5
4 3 A3
=A2+C3 6
輸出:
1 9 5
4 3 5
15
我不確定如何實現我的Java應用程序分析器。由於單元格可能包含尚未分析過的單元格的引用,因此語法必須在計算表達式之前完成分析單元格。根據我的理解,語法訪問者可以在解析期間返回值,但無法評估包含對尚未解析的單元格的引用的表達式。
解決此問題的最佳方法是什麼?我能夠確定的唯一解決方案是將語法分成兩個更小的語法,一個解析單元格,另一個解析單元格內的表達式。但是,我寧願保持簡單,只需一個解析過程。
在一句話中,在Antlr4中,處理尚未解析數據的引用的最佳方法是什麼?
+1恕我直言,使用自己的模型進行評估總是一個好主意。而不是由antlr生成的* Context對象。 – Yevgeniy
我第一次看這個答案時誤解了這個答案。在Antlr中究竟如何執行評估步驟?根據我的理解,訪問者進行深度優先遍歷。我需要的是細胞第一個寬度,然後深入細胞內的表達式 – bgregor
如果您需要不同的步行策略,然後創建您自己的訪客類。 AbstractParseTreeVisitor中的所有內容都可以被覆蓋。實現'visitChildren()'方法的自己的變體。 –