2014-04-03 24 views
0

我重寫了一些偵聽器方法。我有幾個對象對應以下語法:Antlr4,C# - 如何在更全局的偵聽器中檢查觸發器?

object : BEGIN o1+ END ; 
o1 : (Token1 | (name | Token2)); 

下面是從EnterObject()重寫方法的代碼:

if (context.o1(1).name() != null) 
{ 
object.Field = context.o1(1).name().GetChild(0).GetText(); 
} 
else 
{ 
object.Field = context.o1(1).Token2().GetText(); 
} 

它的工作原理,但我有一些疑問。是否有更有效的方法檢查EnterObject()中的EnterName()也許?

回答

0

我相信你可以使用context.o1(1).GetText()而不是更長的表達式。

我還建議你添加一個屬性給你使用這段代碼聲明o1後代的依賴關係(因爲那些後代隱式定義了調用的結果)。

[RuleDependency(
    typeof(YourParserType), 
    YourParserType.RULE_o1, 
    0, 
    Dependents.Descendants)] 

您可以通過在應用程序或庫初始化代碼期間調用以下內容來驗證此屬性的所有用法。

Assembly assembly = typeof(YourListenerClass).Assembly; 
RuleDependencyChecker.CheckDependencies(assembly); 
+0

感謝您的建議。目前我已經使用長的「context.o1(1).name()。GetChild(0).GetText()」類似的調用重寫了方法。它工作正常,所以我決定不聲明任何依賴關係。 – Ivan

相關問題