簡體   English   中英

ANTLR不會為簡單的計算器語法分析此簡單的輸入

[英]ANTLR won't parse this easy input for simple calculator grammar

grammar TestCSharpParser;


options {
  language=CSharp3;
}

@parser::namespace { Demo.Antlr }
@lexer::namespace { Demo.Antlr }

parse returns [double value]
  :  exp EOF {$value = $exp.value;}
  ;

exp returns [double value]
  :  addExp {$value = $addExp.value;}
  ;

addExp returns [double value]
  :  a=mulExp       {$value = $a.value;}
     ( '+' b=mulExp {$value += $b.value;}
     | '-' b=mulExp {$value -= $b.value;}
     )*
  ;

mulExp returns [double value]
  :  a=unaryExp       {$value = $a.value;}
     ( '*' b=unaryExp {$value *= $b.value;}
     | '/' b=unaryExp {$value /= $b.value;}
     )*
  ;

unaryExp returns [double value]
  :  '-' atom {$value = -1.0 * $atom.value;}
  |  atom     {$value = $atom.value;}
  ;

atom returns [double value]
  :  Number      {$value = Double.Parse($Number.Text, CultureInfo.InvariantCulture);}
  |  '(' exp ')' {$value = $exp.value;}
  ;

Number
  :  ('0'..'9')+ ('.' ('0'..'9')+)?
  ;

Space 
  :  (' ' | '\t' | '\r' | '\n'){$channel = HIDDEN;}
  ;

語法不會解析使用ANTLRWorks嘗試的簡單語句4/5(4/5)

有誰知道為什么會這樣嗎? 我認為這應該正常工作。

它一直給我NoViableAltException

我看到了與使用CSharp3目標有關的幾個問題。

  • CSharp2和CSharp3目標定義常量Hidden而不是HIDDEN
  • ANTLRWorks不能用於生成針對CSharp2或CSharp3目標的語法的解析器。 解析器必須通過MSBuild(首選)或使用Antlr3.exe生成。 這些內容記錄在ANTLR 3 C#版本 Wiki頁面上。
  • ANTLRWorks不能用於測試為CSharp2或CSharp3目標生成的解析器。 解釋器或調試器報告的任何結果均不可信任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM