出于測驗目的,我想用我的 Xtext 語言決議一個獨立的運算式。
在我的測驗中,我可以使用 決議一個完整的模型ParseHelper<Model>,例如,
val model = parseHelper.parse('''function { 1 2 }''')
是否可以以類似的方式決議獨立運算式?我試過注入ParseHelper<Expression>和寫作
val expr = parseHelper.parse('''1 2''')
但這null出于某種原因回傳。
上面的示例基于以下虛擬語法。
Model:
functions =Function*
;
Function:
'function' '{' Expression '}'
;
Expression:
Addition
;
Addition returns Expression:
Literal (=>({Addition.left=current} ' ') right=Literal)*
;
Literal returns Expression:
INT
;
uj5u.com熱心網友回復:
也可以IParser直接使用。要決議一條規則,您可以執行以下操作:
@Inject IParser parser // inject the parser
@Inject <Your-Lang-Name-Here>GrammarAccess grammar // inject your IGrammarAccess
@Test
def void testPartialParse() {
val expression = '''1 2'''
val IParseResult result = parser.parse(grammar.expressionRule, new StringReader(expression)) // partial parsing here
assertNotNull(result.rootASTElement) // rootASTElement should be your Addition
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/438980.html
上一篇:如何將檔案大小的人類可讀格式轉換為Java中的位元組大小?
下一篇:ANTLR4決議樹不包含規則名稱
