2016-09-09 28 views
0

我有一個簡單的語法是這樣的:解析器接受腐敗輸入

grammar RuleDSL with org.eclipse.xtext.common.Terminals 

generate ruledsl "http://www.ruledsl.org" 

Model: 
    rules += Rule*; 

Rule: 
    rule = 'Rule' '{' subrules += Subrule* '}' 
; 

Subrule: fieldA=ID opName=Operator fieldC=INT ';'; 
Operator: 
    '<' | '<=' | '=' | '>=' | '>' 
; 

我不知道爲什麼這個輸入被接受:

Rule { 
      field1 > 5 
      field3 = a   
    } 

這是由

@RunWith(XtextRunner) 
@InjectWith(RuledslInjectorProvider) 
class RuledslParsingTest{ 

    @Inject 
    ParseHelper<Model> parseHelper 

    @Test 
    def void loadModel() {   
     val result = parseHelper.parse(''' 
      Rule { 
       field1 > 5 
       field3 = a 
      } 
     ''') 
     println(result) 
    } 
} 
解析

和產量 - 在一些通過樹遍歷和打印Subrule - :

字段1> 5

場3 = 0

anull0

我想不通爲什麼會這樣。在生成的Eclipse PlugIn中,該輸入被標記爲不正確,因爲它應該是。

+1

你問結果資源錯誤嗎?你也許可以看看validationtesthelper以及 –

+0

這樣做!謝謝。也許你可以把'assertEquals(0,result.eResource.errors.size)'添加到生成的'Hello World'測試用例中。 –

回答

0

您詢問resulteResource及其錯誤的資源。你也可以看看ValidationTestHelper。