当我尝试使用ANTLR4生成C#时会发生什么奇怪的错误?

Eth*_*ein 6 c# parsing antlr antlr4 visual-studio-2015

我(现在)尝试使用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) ;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此命令从中生成C#代码时:

java -jar C:\...\antlr-4.2-complete.jar -DLanguage=CSharp .\...\Grammar.g4
Run Code Online (Sandbox Code Playgroud)

我得到这些奇怪的错误:

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
Run Code Online (Sandbox Code Playgroud)

可能导致这些错误的原因,我该如何解决?我现在最好的猜测是Visual Studio将奇怪的字符插入到文件的开头,我无法删除它们.

Eth*_*ein 6

今天不是个好日子。

Visual Studio 决定惹恼我并将我的所有文件的文件格式更改为 UTF-8。我需要做的就是转到File > Advanced Save Settings,并将编码更改为 US-ASCII。这删除了开头插入的奇数字符,并解决了(大部分)我的问题。

  • 这些“奇数”字符就是所谓的 BOM([字节顺序标记](https://en.wikipedia.org/wiki/Byte_order_mark))。该文件已存储在 UTF-8 中,其中 BOM 可能包含 3 个字节(您收到警告的那些字节)。您可以使用或不使用 BOM 存储 Unicode 文件,而不必返回 ASCII 编码,只需摆脱 BOM。 (3认同)