2015-10-31 6 views
5

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.

Antwort

4

Heute ist kein guter Tag.

Visual Studio hat sich entschieden, mit mir zu verfahren und meine Dateiformate für alle meine Dateien in UTF-8 zu ändern. Alles, was ich tun musste, war, gehen Sie zu File > Advanced Save Settings, und ändern Sie die Codierung in US-ASCII. Dies entfernte die ungeraden Zeichen, die am Anfang eingefügt wurden, und löste (die meisten) meiner Probleme.

+2

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. –

Verwandte Themen