我(现在)正在尝试使用 ANTLR4 和 C# 来设计一种语言,到目前为止我一直在摆弄它。在此过程中,我决定尝试创建一个简单的数学表达式求值器。在此过程中,我为其创建了以下 ANTLR 语法:
grammar Calculator;
@parser::members
{
protected const int EOF = Eof;
}
@lexer::members
{
protected const int EOF = EOF;
protected const int HIDDEN = Hidden;
}
program : expr+ ;
expr : expr op=('*' | '/') expr
| expr op=('+' | '-') expr
| INT
| '(' expression ')'
;
INT : [0-9]+ ;
MUL : '*' ;
DIV : '/' ;
ADD : '+' ;
SUB : '-' ;
WS : (' ' | '\r' | '\n') -> channel(HIDDEN) ;
当我尝试使用此命令从中生成 C# 代码时:
java -jar C:\...\antlr-4.2-complete.jar -DLanguage=CSharp .\...\Grammar.g4
我得到这些奇怪的错误:
error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:0: syntax error: 'ï' came as a complete surprise to me error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:1: syntax error: '»' came as a complete surprise to me error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:2: syntax error: '¿' came as a complete surprise to me error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:3: syntax error: mismatched input 'grammar' expecting SEMI
可能导致这些错误的原因是什么,我该如何解决?目前我最好的猜测是 Visual Studio 将奇怪的字符插入到文件的开头,我无法删除它们。
最佳答案
今天不是个好日子
Visual Studio 决定对付我,将我所有文件的文件格式更改为 UTF-8。我所需要做的就是转到 File > Advanced Save Settings
,并将编码更改为 US-ASCII。这删除了开头插入的奇怪字符,并解决了(大部分)我的问题。
关于c# - 当我尝试使用 ANTLR4 生成 C# 时出现的这些奇怪错误是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33446700/