অনুশীলন হিসাবে, আমি স্ক্র্যাচ থেকে হাস্কেলের পক্ষে একটি পার্সার লিখছি। লিক্সার তৈরি করার সময়, আমি হাসেল 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
ঠিক জরিমানা সংকলন। আমি কি ভাষার স্পেসিফিকেশন ভুলভাবে পড়ছি? জিএইচসির (বোধগম্য) আচরণটি কি আসলেই সঠিক, বা প্রযুক্তিগতভাবে প্রতিবেদনে নির্দিষ্টকরণের বিরুদ্ধে রয়েছে? আমি এর কোথাও কোনও উল্লেখ পাই না।