我有以下的語法使用GETALL(...):如何在ParseTreeMatch ANTLR4
input
:
formula EOF
;
formula
:
TRUE
| FALSE
| formula AND formula
| formula OR formula
| (quantifier)+ ST condition
;
condition
:
atom EQUALS QUOTE? (assignment | atom) QUOTE?
;
quantifier
:
(FOREACH | EXISTS) variable IN domain
;
.....
,它解析簡單的一階邏輯公式。因此,使用以下代碼:
String formulaPatternString = "<formula>";
ParseTreePattern formulaPattern = parser.compileParseTreePattern(formulaPatternString, GraphParser.RULE_formula);
List<ParseTreeMatch> formulaMatches = formulaPattern.findAll(tree, "//formula");
我在我的輸入中找到的公式數量。對於實施例
Exists node in GraphA -> node.color='red'
返回一個formulaMatch
和
Exists node in GraphA -> node.color='red' AND Foreach node in GraphA Exists node1 in GraphB -> node.color=node1.color
返回兩個formulaMatches
。 現在我想使用formulaMatches
以最終得出公式中的量詞的數量(正如您所看到的,我允許一個或多個)。我認爲我需要的方法是formulaMatches.get(i).getAll("quantifier")
,但這會導致0匹配(在我的情況下,第一個公式中的量詞部分是Exists node in GraphA
,第二個是Foreach node in GraphA Exists node1 in GraphB
,它是2個量詞)。任何想法如何我可以實現這一目標?
嗯,當我試圖區分一個'ParseTreeMatch'要麼'FormulaContext'或'ParseRuleContext'我結束了'不兼容的類型:ParseTreeMatch不能轉換到ParserRuleContex'和'不兼容的類型:ParseTreeMatch不能轉換爲FormulaContext' – Wosh
還有一個問題:我怎麼知道我是否用'ParseInterpreter'解析? – Wosh
我更新了我的帖子以糾正「ParseTreeMatch」的使用。對於這樣一個微不足道的表達式,你應該使用XPath表達式'// formula'而不是模式,但是無論哪種方式都可以。如果您在代碼中使用「ParserInterpreter」,則使用「ParserInterpreter」。 –