Ich versuche (jetzt), ANTLR4 und C# zu verwenden, um eine Sprache zu entwerfen, und bis jetzt habe ich damit herumgespielt. In diesem Prozess beschloss ich, einen einfachen mathematischen Ausdruck-Evaluator zu erstellen. In dem Prozess, habe ich die folgende ANTLR Grammatik für sie:Was sind diese seltsamen Fehler, wenn ich versuche, C# mit ANTLR4 zu generieren?
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) ;
Wenn ich versuche, C# -Code aus es mit diesem Befehl zu generieren:
java -jar C:\...\antlr-4.2-complete.jar -DLanguage=CSharp .\...\Grammar.g4
ich diese seltsamen Fehler:
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
Was könnte diese Fehler verursachen und wie kann ich sie beheben? Meine beste Schätzung im Moment ist, dass Visual Studio ungerade Zeichen am Anfang der Datei einfügt, und ich kann sie nicht entfernen.
Diese "ungeraden" Zeichen sind die sogenannte BOM ([Byte-Reihenfolgezeichen] (https://en.wikipedia.org/wiki/Byte_order_mark)). Die Datei wurde wahrscheinlich in UTF-8 gespeichert, wo die Stückliste aus 3 Bytes besteht (für die Sie die Warnung erhalten haben). Sie können eine Unicode-Datei mit oder ohne Stückliste speichern und müssen nicht zur ASCII-Codierung zurückkehren, nur um die Stückliste loszuwerden. –