অনুশীলন হিসাবে, আমি স্ক্র্যাচ থেকে হাস্কেলের পক্ষে একটি পার্সার লিখছি। লিক্সার তৈরি করার সময়, আমি হাসেল 2010 রিপোর্টে নিম্নলিখিত বিধিগুলি লক্ষ্য করেছি :
সংখ্যা → ascDigit | uniDigit
ascDigit →0|1| … |9
ইউনিডিজিট → যে কোনও ইউনিকোড দশমিক অঙ্কের
অক্টিট →0|1| … |7
হেক্সিট → ডিজিট |A| … |F|a| … |fদশমিক → অঙ্ক { অঙ্ক }
অকট্যাল → octit { octit }
হেক্সাডেসিমেল → hexit { hexit }পূর্ণসংখ্যা → দশমিক |
0oঅষ্টাল |0Oঅষ্টাল |0xহেক্সাডেসিমাল |0Xহেক্সাডেসিমাল
ভাসা → দশমিক.দশমিক [ অভিজাত ] | দশমিক ব্যয়কারী
exp (e|E) [+|-] দশমিক
ডেসিমাল এবং হেক্সাডেসিমেল লিটারেল, ভাসা লিটারেল সহ, সব উপর ভিত্তি করে অঙ্ক , যা কোন ইউনিকোড দশমিক অঙ্ক স্বীকার করেন, পরিবর্তে ascDigit , যা শুধুমাত্র মৌলিক সংখ্যার 0-9 হওয়া ASCII থেকে স্বীকার করে। স্ট্রেঞ্জলি, অকট্যাল উপর ভিত্তি করে তৈরি octit , যা পরিবর্তে শুধুমাত্র স্বীকার হওয়া ASCII সংখ্যা 0-7। আমি অনুমান করব যে এই "ইউনিকোড দশমিক সংখ্যা" হ'ল "এনডি" সাধারণ বিভাগ সহ কোনও ইউনিকোড কোডপয়েন্ট। তবে এর মধ্যে পূর্ণ-প্রস্থের অঙ্কগুলি 0-9 এবং দেবনাগরী সংখ্যাসমূহ -০ ० এর মতো অক্ষর অন্তর্ভুক্ত রয়েছে ९ দেখতে পাচ্ছি কেন এটা এই শনাক্তকারী মধ্যে করার অনুমতি কাম্য হতে পারে, কিন্তু আমি এক, যার ফলে লিখতে জন্য কোন সুবিধা সবটা দেখতে পারেন ९0আক্ষরিক জন্য 90।
জিএইচসি আমার সাথে একমত বলে মনে হচ্ছে। আমি যখন এই ফাইলটি সংকলনের চেষ্টা করি,
module DigitTest where
x1 = 1
এটি এই ত্রুটি আউট spits।
digitTest1.hs:2:6: error: lexical error at character '\65297'
|
2 | x1 = 1
| ^
তবে, এই ফাইল
module DigitTest where
x1 = 1
ঠিক জরিমানা সংকলন। আমি কি ভাষার স্পেসিফিকেশন ভুলভাবে পড়ছি? জিএইচসির (বোধগম্য) আচরণটি কি আসলেই সঠিক, বা প্রযুক্তিগতভাবে প্রতিবেদনে নির্দিষ্টকরণের বিরুদ্ধে রয়েছে? আমি এর কোথাও কোনও উল্লেখ পাই না।