मैं अब (अब) एक भाषा डिजाइन करने के लिए एएनटीएलआर 4 और सी # का उपयोग करने की कोशिश कर रहा हूं, और अब तक मैं इसके साथ झुका रहा हूं। इस प्रक्रिया में, मैंने एक सरल गणितीय अभिव्यक्ति मूल्यांकनकर्ता को आजमाने और बनाने का निर्णय लिया। इस प्रक्रिया में, मैं इसके लिए निम्नलिखित ANTLR व्याकरण बनाया:जब मैं एएनटीएलआर 4 के साथ सी # उत्पन्न करने का प्रयास करता हूं तो ये विषम त्रुटियां क्या होती हैं?
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) ;
जब मैं इस आदेश का उपयोग कर इसे से सी # कोड जनरेट करने का प्रयास:
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
इन त्रुटियों के कारण क्या हो सकता है, और मैं उन्हें कैसे ठीक कर सकता हूं? इस समय मेरा सबसे अच्छा अनुमान यह है कि विजुअल स्टूडियो फ़ाइल की शुरुआत में विषम पात्रों को सम्मिलित कर रहा है, और मैं उन्हें हटा नहीं सकता।
ये "विषम" अक्षर सामाजिक बीओएम ([बाइट ऑर्डर मार्क] (https://en.wikipedia.org/wiki/Byte_order_mark) है)। फ़ाइल को यूटीएफ -8 में संग्रहीत किया गया है, जहां बीओएम में 3 बाइट होते हैं (जिनके लिए आपको चेतावनी मिली है)। आप बीओएम से छुटकारा पाने के लिए, यूनिकोड फ़ाइल को या डब्ल्यू/ओ बीओएम स्टोर कर सकते हैं और एएससीआईआई एन्कोडिंग पर वापस लौटना नहीं है। –