2015-10-31 28 views
5

Sto (ora) cercando di usare ANTLR4 e C# per progettare un linguaggio, e finora ho continuato a giocherellare con esso. Nel processo, ho deciso di provare a creare un semplice valutatore di espressioni matematiche. Nel processo, ho creato il seguente grammatica ANTLR per esso:Quali sono questi strani errori che si verificano quando tento di generare C# con ANTLR4?

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) ; 

Quando provo a generare il codice C# da esso con questo comando:

java -jar C:\...\antlr-4.2-complete.jar -DLanguage=CSharp .\...\Grammar.g4 

ricevo questi errori dispari:

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 

Quali potrebbero essere la causa di questi errori e come posso risolverli? La mia ipotesi migliore al momento è che Visual Studio stia inserendo caratteri dispari all'inizio del file e non riesco a rimuoverli.

risposta

4

Oggi non è una buona giornata.

Visual Studio ha deciso di pasticciare con me e modificare i miei formati di file in UTF-8 per tutti i miei file. Tutto quello che dovevo fare era andare a File > Advanced Save Settings e cambiare la codifica in US-ASCII. Ciò rimosse i caratteri dispari inseriti all'inizio e risolti (la maggior parte) dei miei problemi.

+2

Questi caratteri "dispari" sono i BOM cosiddetti ([byte order mark] (https://en.wikipedia.org/wiki/Byte_order_mark)). Il file è stato memorizzato in UTF-8 probabilmente dove il BOM è composto da 3 byte (quelli per cui è stato visualizzato l'avviso). È possibile memorizzare un file Unicode con o senza BOM e non è necessario tornare alla codifica ASCII, solo per eliminare il BOM. –