শব্দ লোগোশব্দ ডকুমেন্টেশন

শব্দ — পূর্ণ ডকুমেন্টেশন

ভাষার প্রতিটি অংশ এখানে আছে: সিনট্যাক্স, কীওয়ার্ড, অপারেটর, লেখা-তালিকা-মানচিত্রের পদ্ধতি, শ্রেণি, ত্রুটি সামলানো, বিল্ট-ইন কাজ, কমান্ড লাইন, নেটিভ কম্পাইলার আর শব্দ স্টুডিও। পাতার প্রতিটি উদাহরণ আসল ইন্টারপ্রেটার ও নেটিভ কম্পাইলারে চালিয়ে মিলিয়ে দেখা হয়েছে।

সংস্করণ ০.১.০ফাইল .shobdoইন্টারপ্রেটার TypeScriptনেটিভ কম্পাইলার arm64 macOS

১শুরু করা

শব্দ একটি সাধারণ-উদ্দেশ্যের প্রোগ্রামিং ভাষা, যার কীওয়ার্ড, বিল্ট-ইন কাজ, ত্রুটি বার্তা ও সংখ্যা সবই বাংলায়। সোর্স ফাইলের এক্সটেনশন .shobdo, এনকোডিং UTF-8।

প্রথম প্রোগ্রাম
লেখো("নমস্কার, বিশ্ব!")
নমস্কার, বিশ্ব!

তিনভাবে চালানো যায়

🌐 শব্দ স্টুডিও

ব্রাউজারে এডিটর খুলে ▶ চালাও চাপুন। কিছু ইনস্টল করতে হয় না। স্টুডিও খুলুন

⌨️ ইন্টারপ্রেটার

Node.js দিয়ে: node dist/src/cli.js run ফাইল.shobdo

⚙️ নেটিভ কম্পাইলার

আসল মেশিন কোড: build/shobdoc ফাইল.shobdo -o প্রোগ্রাম তারপর ./প্রোগ্রাম

সোর্স থেকে বানানো

cd shobdo
npm install && npm run build        # ইন্টারপ্রেটার বানানো
node dist/src/cli.js run examples/hello.shobdo
npm run bootstrap                      # নেটিভ কম্পাইলার বানানো → build/shobdoc
build/shobdoc examples/hello.shobdo -o hello && ./hello

২কমান্ড লাইন (CLI)

সব কমান্ড shobdo/ ফোল্ডার থেকে চালাতে হয়।

কমান্ডকী করে
node dist/src/cli.js run <ফাইল>ইন্টারপ্রেটারে প্রোগ্রাম চালায়। ফাইলের পরের শব্দগুলো প্রোগ্রাম আর্গুমেন্ট() দিয়ে পায় (-- দিয়ে শুরু হওয়াগুলো বাদে)।
… run <ফাইল> --latin-digitsফলাফলে বাংলা অঙ্কের বদলে 0–9 দেখায়।
node dist/src/cli.js replইন্টারঅ্যাক্টিভ মোড, প্রম্পট শব্দ>। প্রতিটি লাইন সঙ্গে সঙ্গে চলে।
build/shobdoc <ফাইল> -o <আউটপুট>নেটিভ কম্পাইল: স্বাক্ষরিত arm64 Mach-O এক্সিকিউটেবল বানায়।
npm run buildTypeScript ইন্টারপ্রেটার কম্পাইল করে dist/-এ।
npm testইন্টারপ্রেটারের ইউনিট টেস্ট।
npm run bootstrapতিন ধাপে কম্পাইলার নিজেকে নিজে বানায়; তিনটি বাইনারি হুবহু এক না হলে ব্যর্থ হয়।
npm run test:conformকনফরম্যান্স স্যুট: একই কেস ইন্টারপ্রেটার ও নেটিভ দুটোতেই।
npm run test:nativetests/native/-এর প্রোগ্রাম ইন্টারপ্রেটার বনাম নেটিভ বাইনারিতে মেলানো।
npm run ide / npm run test:ideশব্দ স্টুডিও বানানো / পরীক্ষা করা।
npm run app:macosmacOS অ্যাপ Shobdo Studio.app বানানো (Xcode command-line tools লাগে)।
node tools/doccheck.js ../shobdo-docs.html --native build/shobdocএই পাতার সব উদাহরণ চালিয়ে প্রত্যাশিত ফলাফলের সঙ্গে মেলায়।

প্রস্থান কোড: সফল হলে 0, অধরা ত্রুটি হলে 1, আর বের_হও(ন) দিলে ন।

৩মৌলিক নিয়ম

  • ব্লক সবসময় { } দিয়ে। ইনডেন্টেশনের কোনো অর্থ নেই।
  • স্টেটমেন্ট আলাদা হয় নতুন লাইনে, অথবা একই লাইনে ; দিয়ে।
  • মন্তব্য: // এক লাইন এবং /* বহু লাইন */।
  • অঙ্ক: বাংলা ০–৯ ও লাতিন 0–9 দুটোই চলে, এমনকি মিশিয়েও। পড়ার সুবিধার জন্য _ দেওয়া যায়: ১_০০০_০০০। ষোড়শিক: 0xFF।
  • নাম বাংলা বা লাতিন অক্ষর আর _ দিয়ে শুরু হয়; পরে অঙ্কও থাকতে পারে। যুক্তাক্ষরের জন্য ZWJ/ZWNJ চলে। সোর্স NFC-তে স্বাভাবিক করা হয়, তাই একই শব্দের ভিন্ন ইউনিকোড রূপ একই নাম।
  • শর্ত অবশ্যই সত্য বা মিথ্যা হতে হবে। সংখ্যা বা লেখাকে শর্ত হিসেবে দিলে ত্রুটি হয়।
  • মান বসানো একটি স্টেটমেন্ট, রাশি নয়। তাই যদি ক = ১ লেখা যায় না।
মন্তব্য, সেমিকোলন ও মিশ্র অঙ্ক
// এটি মন্তব্য
/* এটিও
   মন্তব্য */
ধরি ক = ১০; ধরি খ = 5
লেখো(ক + খ, ১_০০০ + 0x10)
১৫ ১০১৬

৪চলক ও ধ্রুবক

ধরি দিয়ে চলক (variable), ধ্রুব দিয়ে ধ্রুবক। ধ্রুবকে শুরুতেই মান দিতে হয় এবং পরে বদলানো যায় না। মান ছাড়া ধরি দিলে মান হয় শূন্য। একই স্কোপে একই নাম দুবার ঘোষণা করা যায় না, তবে ভেতরের ব্লকে নতুন করে করা যায়। লেখার ভেতরে {রাশি} লিখলে তার মান বসে যায়।

ধরি, ধ্রুব ও লেখায় মান বসানো
ধরি নাম = "রিনা"
ধরি বয়স = ২৫
ধ্রুব দেশ = "বাংলাদেশ"
বয়স += ১
লেখো("{নাম}-এর বয়স {বয়স}, দেশ {দেশ}")
ধরি খালি
লেখো(খালি, "দুই গুণ: {বয়স * ২}")
রিনা-এর বয়স ২৬, দেশ বাংলাদেশ
শূন্য দুই গুণ: ৫২

যৌগিক মান বসানো: += -= *= /= %= **=। লক্ষ্য হতে পারে নাম, সদস্য (ব.x) বা সূচক (ত[০])।

ধ্রুব বদলানোর চেষ্টা
ধ্রুব পাই = ৩
পাই = ৪
ত্রুটি (case.shobdo) লাইন 2: ‘পাই’ ধ্রুব, এর মান বদলানো যায় না

৫মানের ধরন

ধরন (ধরন() যা ফেরত দেয়)উদাহরণবিবরণ
সংখ্যা৪২, ৩.৫, 0xFFপূর্ণসংখ্যা ও দশমিক
লেখা"নমস্কার", 'একক'ইউনিকোড লেখা; দৈর্ঘ্য গোনা হয় কোড-পয়েন্টে
সত্যমিথ্যাসত্য, মিথ্যাবুলিয়ান
শূন্যশূন্যকোনো মান নেই (null)
তালিকা[১, ২, ৩]ক্রমিক তালিকা (list)
মানচিত্র{নাম: "আম"}চাবি→মান (map); ঢোকানোর ক্রম বজায় থাকে
কাজx => x * ২ফাংশন, পদ্ধতি, বিল্ট-ইন, শ্রেণি
শ্রেণির নামবিন্দু(১, ২)বস্তুর ধরন তার শ্রেণির নাম
ধরন()
লেখো(ধরন(৪২), ধরন(৩.৫), ধরন("ক"), ধরন(সত্য), ধরন(শূন্য))
লেখো(ধরন([১]), ধরন({ক: ১}), ধরন(লেখো))
সংখ্যা সংখ্যা লেখা সত্যমিথ্যা শূন্য
তালিকা মানচিত্র কাজ

৬সংখ্যা ও অপারেটর

গাণিতিক ও বিট অপারেটর
লেখো(১০ + ৩, ১০ - ৩, ১০ * ৩, ১০ / ৪, ১০ % ৩, ২ ** ১০)
লেখো(ভাগফল(১০, ৩), ০xFF, ১_০০০_০০০, -৭)
লেখো(৬ & ৩, ৬ | ৩, ৬ ^ ৩, ১ << ৪, ২৫৬ >> ২)
১৩ ৭ ৩০ ২.৫ ১ ১০২৪
৩ ২৫৫ ১০০০০০০ -৭
২ ৭ ৫ ১৬ ৬৪
পূর্ণসংখ্যার ভাগ: / দশমিক ফল দেয় (১০ / ৪ = ২.৫)। পূর্ণসংখ্যার ভাগফলের জন্য ভাগফল(ক, খ) ব্যবহার করুন। // মন্তব্য, ভাগ নয়।

অপারেটরের অগ্রাধিকার (নিচ থেকে উপরে বাড়ে)

স্তরঅপারেটরঅর্থ
১ক ? খ : গশর্তসাপেক্ষ রাশি (ternary)
২??বাঁ দিক শূন্য হলে ডান দিক
৩অথবাযৌক্তিক OR (শর্ট-সার্কিট)
৪এবংযৌক্তিক AND (শর্ট-সার্কিট)
৫== !=সমান / অসমান (তালিকা উপাদান ধরে তুলনা হয়)
৬< > <= >= ভিতরেতুলনা (সংখ্যা-সংখ্যা বা লেখা-লেখা); সদস্যপদ
৭.. ..=পরিসর: ১..৪ = [১, ২, ৩]; ১..=৪ শেষটিসহ
৮–১১|, ^, &, << >>বিট অপারেশন (শুধু পূর্ণসংখ্যা)
১২+ -যোগ, বিয়োগ; + লেখা ও তালিকা জোড়ে
১৩* / %গুণ, ভাগ, ভাগশেষ; লেখা * সংখ্যা পুনরাবৃত্তি
এককনা -যৌক্তিক NOT, ঋণাত্মক
ঘাত**ঘাত (ডান-সংযোজী)
সর্বোচ্চক(…) ক[…] ক.খ ক?.খকল, সূচক, সদস্য, নিরাপদ সদস্য

৭লেখা (স্ট্রিং)

লেখা "…" বা '…' দিয়ে। এস্কেপ: \n নতুন লাইন, \t ট্যাব, \" উদ্ধৃতি, \\ ব্যাকস্ল্যাশ, \{ আসল বন্ধনী। {রাশি} মান বসায়। সূচক শ[০] একটি কোড-পয়েন্ট দেয়।

লেখার পদ্ধতি
ধরি শ = "শব্দভাণ্ডার"
লেখো(দৈর্ঘ্য(শ), শ.দৈর্ঘ্য, শ[০], শ.টুকরো(০, ৩))
লেখো("ক,খ,গ".ভাগ(","), "  ফাঁকা  ".ছাঁটো(), "abc".বড়(), "ABC".ছোট())
লেখো("কলকাতা".বদলাও("কা", "খা"), "আমার".শুরু("আ"), "আম".ধারণ("ম"), "abc".খোঁজো("c"))
লেখো("হা" * ৩, "এক" + "দুই", "বন্ধনী: \{না\}", "ক" < "খ")
লেখো("প্রথম লাইন\nদ্বিতীয় লাইন")
১১ ১১ শ শব্
["ক", "খ", "গ"] ফাঁকা ABC abc
কলখাতা সত্য সত্য ২
হাহাহা একদুই বন্ধনী: {না} সত্য
প্রথম লাইন
দ্বিতীয় লাইন
পদ্ধতিফেরত দেয়
শ.দৈর্ঘ্যকোড-পয়েন্টের সংখ্যা (বৈশিষ্ট্য, কল নয়)
শ.বড়() / শ.ছোট()বড়/ছোট হাতের অক্ষর (এখন শুধু ASCII)
শ.ছাঁটো()দুই পাশের ফাঁকা জায়গা বাদ
শ.ভাগ(বিভাজক)লেখার তালিকা
শ.টুকরো(শুরু, শেষ?)অংশ লেখা (শেষ বাদে)
শ.খোঁজো(x)প্রথম অবস্থান, না থাকলে -১
শ.শুরু(x) / শ.ধারণ(x)x দিয়ে শুরু কিনা / x আছে কিনা
শ.বদলাও(ক, খ)সব ক-এর জায়গায় খ

৮তালিকা

তালিকার পদ্ধতি
ধরি ত = [৩, ১, ২]
ত.যোগ(৫)
লেখো(ত, দৈর্ঘ্য(ত), ত[০], ত.সাজাও(), ত.উল্টাও())
লেখো(ত.মানচিত্র(x => x * ২), ত.ছাঁকো(x => x > ১), ত.কমাও((ক, খ) => ক + খ, ০))
লেখো(ত.জোড়ো("-"), ত.টুকরো(১, ৩), ত.বের(), ত, [১] + [২, ৩], ২ ভিতরে ত)
ত[০] = ৯
লেখো(ত, ত == [৯, ১, ২])
[৩, ১, ২, ৫] ৪ ৩ [১, ২, ৩, ৫] [৫, ২, ১, ৩]
[৬, ২, ৪, ১০] [৩, ২, ৫] ১১
৩-১-২-৫ [১, ২] ৫ [৩, ১, ২] [১, ২, ৩] সত্য
[৯, ১, ২] সত্য
পদ্ধতিকী করে
ত.দৈর্ঘ্যউপাদানের সংখ্যা (বৈশিষ্ট্য)
ত.যোগ(x)শেষে x যোগ করে (তালিকা বদলায়)
ত.বের()শেষ উপাদান সরিয়ে ফেরত দেয়; খালি হলে শূন্য
ত.মানচিত্র(কাজ)প্রতিটিতে কাজ চালিয়ে নতুন তালিকা; কাজ পায় (উপাদান, সূচক)
ত.ছাঁকো(কাজ)যেগুলোতে কাজ সত্য দেয়
ত.কমাও(কাজ, শুরু)এক মানে নামিয়ে আনে (reduce)
ত.জোড়ো(বিভাজক?)লেখায় জোড়ে
ত.টুকরো(শুরু, শেষ?)অংশের নতুন তালিকা
ত.উল্টাও() / ত.সাজাও()উল্টো / সাজানো নতুন তালিকা (মূলটি বদলায় না)

সীমার বাইরের সূচক ত্রুটি দেয়: সূচক সীমার বাইরে: ৫ (দৈর্ঘ্য ২)।

৯মানচিত্র

{চাবি: মান}। নাম-আকারের চাবি লেখা হয়ে যায়; অন্য চাবির জন্য রাশি দিন ({১: "এক"})। ম.চাবি ও ম["চাবি"] একই; নেই এমন চাবি শূন্য দেয়। প্রতিটি লুপ চাবিগুলোর উপর ঘোরে।

মানচিত্রের ব্যবহার
ধরি ফল = {নাম: "আম", দাম: ৫০}
ফল.রং = "হলুদ"
ফল["ওজন"] = ২
লেখো(ফল.নাম, ফল["দাম"], দৈর্ঘ্য(ফল))
লেখো(ফল.চাবি(), ফল.আছে("রং"), ফল.অজানা)
ফল.মুছো("ওজন")
লেখো(ফল)
প্রতিটি চ এর মধ্যে ফল { লেখো(চ, "→", ফল[চ]) }
আম ৫০ ৪
["নাম", "দাম", "রং", "ওজন"] সত্য শূন্য
{"নাম": "আম", "দাম": ৫০, "রং": "হলুদ"}
নাম → আম
দাম → ৫০
রং → হলুদ
পদ্ধতিকী করে
ম.দৈর্ঘ্যজোড়ার সংখ্যা (বৈশিষ্ট্য)
ম.চাবি() / ম.মান()সব চাবি / সব মানের তালিকা
ম.আছে(চাবি)চাবি আছে কিনা
ম.মুছো(চাবি)জোড়া মুছে ফেলে
সতর্কতা: দৈর্ঘ্য, চাবি, মান, আছে, মুছো নামের চাবি ডট দিয়ে পড়া যায় না, কারণ ওগুলো পদ্ধতির নাম। এমন চাবির জন্য ম["মান"] লিখুন।

১০শর্ত ও লুপ

যদি / নাহলে যদি / নাহলে, প্রতিটি, যতক্ষণ, থামো, এগোও
ধরি ন = ৭
যদি ন % ২ == ০ { লেখো("জোড়") } নাহলে যদি ন > ৫ { লেখো("বড় বিজোড়") } নাহলে { লেখো("ছোট বিজোড়") }
প্রতিটি i এর মধ্যে ১..৪ { লেখো(i) }
প্রতিটি i এর মধ্যে ১..=৩ { লেখো(i * i) }
প্রতিটি অ এর মধ্যে "কখ" { লেখো(অ) }
ধরি গ = ০
যতক্ষণ সত্য { গ += ১; যদি গ == ২ { এগোও }; যদি গ > ৪ { থামো }; লেখো("গ = {গ}") }
লেখো(ন > ৫ ? "বড়" : "ছোট", শূন্য ?? "বিকল্প", সত্য এবং না মিথ্যা, মিথ্যা অথবা সত্য)
বড় বিজোড়
১
২
৩
১
৪
৯
ক
খ
গ = ১
গ = ৩
গ = ৪
বড় বিকল্প সত্য সত্য

প্রতিটি নাম এর মধ্যে X-এ X হতে পারে তালিকা, পরিসর, লেখা (প্রতিটি অক্ষর) বা মানচিত্র (প্রতিটি চাবি)।

১১কাজ (ফাংশন)

কাজ নাম(প্যারামিটার) { … }। প্যারামিটারে ডিফল্ট মান দেওয়া যায়। ফেরত মান ফেরত দেয়; না দিলে ফল শূন্য। একই ব্লকের কাজগুলো ঘোষণার আগেই ডাকা যায়। নামহীন কাজ তিন রকমে লেখা যায়: x => …, (ক, খ) => { … } ও কাজ(ক) { … }। কাজ বাইরের চলক ধরে রাখে (closure)।

ডিফল্ট মান, পুনরাবৃত্তি, ল্যাম্বডা, closure
কাজ যোগ(ক, খ = ১০) { ফেরত ক + খ }
লেখো(যোগ(২, ৩), যোগ(৫))
কাজ ফ্যাক্টোরিয়াল(ন) { যদি ন <= ১ { ফেরত ১ }; ফেরত ন * ফ্যাক্টোরিয়াল(ন - ১) }
লেখো(ফ্যাক্টোরিয়াল(১০))
ধরি বর্গ = x => x * x
ধরি গুণ = (ক, খ) => ক * খ
ধরি পরের = কাজ(ক) { ফেরত ক + ১ }
লেখো(বর্গ(৯), গুণ(৬, ৭), পরের(১))
কাজ গণক_বানাও() { ধরি গ = ০; ফেরত () => { গ += ১; ফেরত গ } }
ধরি গণক = গণক_বানাও()
গণক(); গণক()
লেখো(গণক(), যোগ)
৫ ১৫
৩৬২৮৮০০
৮১ ৪২ ২
৩ <কাজ যোগ>
ভুল সংখ্যক আর্গুমেন্ট
কাজ যোগ(ক, খ) { ফেরত ক + খ }
লেখো(যোগ(১))
ত্রুটি (case.shobdo) লাইন 2: ‘যোগ’ ২টি আর্গুমেন্ট চায়, দেওয়া হয়েছে ১টি

১২শ্রেণি ও বস্তু

শ্রেণি নাম { … }। গঠক (constructor) তৈরি(…), পদ্ধতি কাজ নাম(…)। ভেতরে বস্তুকে বলা হয় এটি। উত্তরাধিকার: শ্রেণি সন্তান উর্ধ্ব পিতা; পিতার গঠক উর্ধ্ব(…), পিতার পদ্ধতি উর্ধ্ব.নাম()। গোপন কাজ শুধু সেই শ্রেণির ভেতর থেকে ডাকা যায়। বস্তু বানাতে শ্রেণিকে কাজের মতো ডাকুন, নতুন লাগে না।

উত্তরাধিকার, উর্ধ্ব ও গোপন
শ্রেণি প্রাণী {
  তৈরি(নাম) { এটি.নাম = নাম }
  কাজ বলো() { ফেরত "{এটি.নাম} ডাকে" }
}
শ্রেণি কুকুর উর্ধ্ব প্রাণী {
  তৈরি(নাম, জাত) { উর্ধ্ব(নাম); এটি.জাত = জাত }
  কাজ বলো() { ফেরত উর্ধ্ব.বলো() + ": ঘেউ!" }
  গোপন কাজ গোপন_কথা() { ফেরত "হাড়" }
  কাজ পছন্দ() { ফেরত এটি.গোপন_কথা() }
}
ধরি ট = কুকুর("টমি", "দেশি")
লেখো(ট.বলো(), ট.জাত, ট.পছন্দ())
লেখো(ধরন(ট), ট, কুকুর)
চেষ্টা { ট.গোপন_কথা() } ধরো ত্রু { লেখো(ত্রু) }
টমি ডাকে: ঘেউ! দেশি হাড়
কুকুর <কুকুর বস্তু> <শ্রেণি কুকুর>
‘গোপন_কথা’ গোপন, বাইরে থেকে ব্যবহার করা যায় না

পদ্ধতি ডট দিয়ে বের করলে বস্তুর সঙ্গে বাঁধা থাকে: ধরি ফ = ট.বলো; পরে ফ()। পদ্ধতি এটি ফেরত দিলে শৃঙ্খল বানানো যায়: গ.বাড়াও().বাড়াও()।

১৩ত্রুটি সামলানো

ছোড়ো মান যেকোনো মান ছোড়ে (লেখা, মানচিত্র…)। চেষ্টা { … } ধরো নাম { … } তা ধরে। রানটাইম ত্রুটিও ধরা যায়; তখন নাম-এ থাকে বাংলা ত্রুটি বার্তা।

চেষ্টা / ধরো / ছোড়ো
চেষ্টা { ছোড়ো "বিপদ!" } ধরো e { লেখো("ধরা পড়ল:", e) }
চেষ্টা { ছোড়ো {কোড: ৪০৪, বার্তা: "পাওয়া যায়নি"} } ধরো e { লেখো(e.কোড, e.বার্তা) }
চেষ্টা { লেখো([১, ২][৫]) } ধরো e { লেখো(e) }
চেষ্টা { লেখো(১০ / ০) } ধরো e { লেখো(e) }
চেষ্টা { যদি ১ { লেখো("না") } } ধরো e { লেখো(e) }
ধরা পড়ল: বিপদ!
৪০৪ পাওয়া যায়নি
সূচক সীমার বাইরে: ৫ (দৈর্ঘ্য ২)
শূন্য দিয়ে ভাগ করা যায় না
শর্ত অবশ্যই সত্য বা মিথ্যা হতে হবে, পাওয়া গেছে সংখ্যা

১৪ইনপুট, ফাইল ও মডিউল

কীবোর্ড থেকে পড়া (ইনপুট: রহিম)
ধরি নাম = পড়ো("আপনার নাম? ")
লেখো("স্বাগতম, {নাম}!")
আপনার নাম? স্বাগতম, রহিম!
ফাইল লেখা ও পড়া
ফাইল_লেখো("নোট.txt", "প্রথম লাইন")
লেখো(ফাইল_পড়ো("নোট.txt"), দৈর্ঘ্য(ফাইল_পড়ো("নোট.txt")))
প্রথম লাইন ১০

মডিউল: আনো

আনো "পথ.shobdo" অন্য ফাইলের সব ঘোষণা বর্তমান প্রোগ্রামে আনে। পথ ধরা হয় বর্তমান ফাইলের ফোল্ডার থেকে। একই ফাইল দুবার আনলে একবারই চলে। ফাইল_অন্তর্ভুক্ত("পথ") ফাইলের লেখা লোড বা কম্পাইলের সময়েই লেখা-ধ্রুবক হিসেবে বসিয়ে দেয়।

// গণিত_সাহায্য.shobdo
কাজ বর্গ(ন) { ফেরত ন * ন }

// মূল.shobdo
আনো "গণিত_সাহায্য.shobdo"
লেখো(বর্গ(৯))          // ৮১
ধ্রুব টেমপ্লেট = ফাইল_অন্তর্ভুক্ত("টেমপ্লেট.txt")

১৫বিল্ট-ইন রেফারেন্স

কাজবিবরণউদাহরণ → ফল
লেখো(…)মানগুলো ফাঁকা দিয়ে জুড়ে নতুন লাইনসহ ছাপেলেখো("ক", ১) → ক ১
ত্রুটি_লেখো(…)একই, কিন্তু stderr-এ
পড়ো(প্রম্পট?)এক লাইন ইনপুট লেখা হিসেবে
দৈর্ঘ্য(x)লেখা/তালিকা/মানচিত্রের দৈর্ঘ্যদৈর্ঘ্য("আম") → ২
ধরন(x)ধরনের নামধরন([]) → তালিকা
লেখা(x)যেকোনো মান লেখায়লেখা(৪২) + "!" → ৪২!
সংখ্যা(x)লেখা থেকে সংখ্যা (বাংলা অঙ্কও); না পারলে শূন্যসংখ্যা("৪২") → ৪২
ভাগফল(ক, খ)পূর্ণসংখ্যার ভাগফল (শূন্যের দিকে)ভাগফল(৭, ২) → ৩
কোড(অক্ষর) / অক্ষর(সংখ্যা)ইউনিকোড কোড-পয়েন্ট ↔ অক্ষরকোড("ক") → ২৪৫৩
ফাইল_পড়ো(পথ) / ফাইল_লেখো(পথ, লেখা)UTF-8 ফাইল পড়া / লেখা
বাইট_লেখো(পথ, বাইট, চালানো_যাবে?)০–২৫৫ বাইটের তালিকা ফাইলে লেখে; তৃতীয়টি সত্য হলে এক্সিকিউটেবল (কম্পাইলার এটি দিয়েই বাইনারি লেখে)
শা২৫৬(বাইট)SHA-256 হ্যাশ, ৩২ বাইটের তালিকা
ফাইল_অন্তর্ভুক্ত("পথ")লোড/কম্পাইলের সময় ফাইল লেখা-ধ্রুবক হিসেবে বসায়
আর্গুমেন্ট()কমান্ড লাইনের আর্গুমেন্টের তালিকা
বের_হও(কোড?)প্রোগ্রাম শেষ করে, প্রস্থান কোডসহ

গণিত মডিউল

গণিত.বর্গমূল, পরম, ভূমি, ছাদ, গোল, সর্বোচ্চ(…), সর্বনিম্ন(…), ঘাত(ক, খ), এলোমেলো() (০ থেকে ১-এর মধ্যে) এবং ধ্রুবক গণিত.পাই।

বিল্ট-ইন ও গণিত
লেখো(লেখা(৪২) + "!", সংখ্যা("৪২") + ১, সংখ্যা("abc"), কোড("ক"), অক্ষর(২৪৫৩))
লেখো(গণিত.বর্গমূল(১৪৪), গণিত.পরম(-৫), গণিত.সর্বোচ্চ(৩, ৯, ১), গণিত.সর্বনিম্ন(৩, ৯, ১), গণিত.ঘাত(২, ৮))
লেখো(গণিত.ভূমি(৭.৮), গণিত.ছাদ(৭.২), গণিত.গোল(৭.৫), ভাগফল(-৭, ২))
৪২! ৪৩ শূন্য ২৪৫৩ ক
১২ ৫ ৯ ১ ২৫৬
৭ ৮ ৮ -৩

১৬কীওয়ার্ড তালিকা

কীওয়ার্ড নাম হিসেবে ব্যবহার করা যায় না। সংরক্ষিত শব্দগুলো ভবিষ্যতের জন্য রাখা; এখন এগুলোর কোনো কাজ নেই।

কীওয়ার্ডলাতিনঅর্থঅবস্থা
ধরি / ধ্রুবdhori / dhrubaচলক / ধ্রুবক ঘোষণাচালু
যদি / নাহলেjodi / naholeশর্তচালু
যতক্ষণjotokkhonwhile লুপচালু
প্রতিটি … এর মধ্যেprotiti … er moddhefor-each লুপচালু
থামো / এগোওthamo / egaobreak / continueচালু
কাজ / ফেরতkaj / ferotফাংশন / returnচালু
শ্রেণি / তৈরি / এটিshreni / toiri / eticlass / constructor / thisচালু
উর্ধ্ব / গোপনurdhwo / goponপিতা-শ্রেণি (super) / privateচালু
চেষ্টা / ধরো / ছোড়োchesta / dhoro / chhorotry / catch / throwচালু
সত্য / মিথ্যা / শূন্যshotto / mittha / shunnotrue / false / nullচালু
এবং / অথবা / নাebong / othoba / naand / or / notচালু
ভিতরেbhitoreসদস্যপদ (in)চালু
আনোanoফাইল আনা (import)চালু
অপেক্ষা—await-এর জন্য রাখা; এখন কিছু করে নাসংরক্ষিত
গঠন, মেলাও, থেকে, দাও, অসমকালীন, পুনঃলেখ, স্থির, আচরণ, বাস্তবায়নgothon, —, theke, dao, —, punolekh, sthir, achoron, bastobayonভবিষ্যতের struct, match, async, override, static, interface ইত্যাদিসংরক্ষিত

১৭লাতিন বানান (রোমান হরফে লেখা)

বাংলা কীবোর্ড না থাকলে কীওয়ার্ড লাতিন বানানে লেখা যায়। লেক্সার এগুলো বাংলা শব্দে বদলে নেয়, তাই দুই রকম লেখা হুবহু এক প্রোগ্রাম। lekho ও poro যথাক্রমে লেখো ও পড়ো।

লাতিন বানানে প্রোগ্রাম
dhori x = 5
jodi x > 3 { lekho("boro") } nahole { lekho("chhoto") }
protiti i er moddhe 1..=2 { lekho(i) }
boro
১
২

১৮ত্রুটি বার্তার গঠন

সব ত্রুটি বাংলায়, stderr-এ, আর প্রস্থান কোড ১। ইন্টারপ্রেটার, নেটিভ বাইনারি ও স্টুডিও একই গঠন ব্যবহার করে। লাইন ও কলাম নম্বর লাতিন অঙ্কে থাকে।

ধরনগঠন
সিনট্যাক্সত্রুটি (ফাইল) লাইন N, কলাম C: বার্তা + সোর্স লাইন ও ^ চিহ্ন
রানটাইমত্রুটি (ফাইল) লাইন N: বার্তা
অধরা ছোড়াঅধরা ত্রুটি লাইন N: মান
খুব গভীর পুনরাবৃত্তিত্রুটি (ফাইল): পুনরাবৃত্তি খুব গভীর (স্ট্যাক শেষ) (ইন্টারপ্রেটারে)
সিনট্যাক্স ত্রুটি: কলাম ও চিহ্নসহ
লেখো((১ + ২)
ত্রুটি (case.shobdo) লাইন 2, কলাম 1: ‘)’ আশা করা হয়েছিল, কিন্তু পাওয়া গেছে ফাইলের শেষ
 2 |
   | ^
বানান ভুলে পরামর্শ
ধরি গণনা = ১
লেখো(গননা)
ত্রুটি (case.shobdo) লাইন 2: ‘গননা’ নামে কিছু পাওয়া যায়নি। আপনি কি ‘গণনা’ বোঝাতে চেয়েছেন?
অধরা ছোড়া
ছোড়ো "কিছু ভুল হয়েছে"
অধরা ত্রুটি লাইন 1: কিছু ভুল হয়েছে

১৯নেটিভ কম্পাইলার (শব্দক)

shobdoc নিজেই শব্দ ভাষায় লেখা (self/*.shobdo)। এটি সোর্স থেকে সরাসরি arm64 মেশিন কোড বানিয়ে নিজের Mach-O রাইটার ও নিজের কোড-সিগনেচার দিয়ে বাইনারি লেখে। কোনো অ্যাসেম্বলার, লিংকার, C কম্পাইলার বা codesign লাগে না। প্রোগ্রাম শুধু সিস্টেম কল দিয়ে কার্নেলের সঙ্গে কথা বলে।

বুটস্ট্র্যাপ ধাপকে কম্পাইল করেফল
০TypeScript ইন্টারপ্রেটার কম্পাইলারের সোর্স চালায়build/shobdoc1
১shobdoc1 (নেটিভ)build/shobdoc2
২shobdoc2 (নেটিভ)build/shobdoc3, যা ২-এর সঙ্গে বাইট-বাই-বাইট মেলে
build/shobdoc self/main.shobdo -o shobdoc   # কম্পাইলার নিজেকে আবার বানায়
build/shobdoc প্রোগ্রাম.shobdo -o প্রোগ্রাম
./প্রোগ্রাম

এই পাতার যে উদাহরণে ✓ নেটিভ চিহ্ন আছে, সেটি নেটিভ বাইনারিতেও একই ফল দেয়। শুধু ইন্টারপ্রেটার চিহ্নিতগুলোতে দশমিক আছে, যা নেটিভ কম্পাইলার এখনো সমর্থন করে না।

২০শব্দ স্টুডিও (এডিটর + কম্পাইলার)

একটি পাতায় এডিটর, ইন্টারপ্রেটার ও নিজস্ব কম্পাইলার। সার্ভার বা ইন্টারনেট লাগে না। এখানে খুলুন।

  • বাংলা সিনট্যাক্স হাইলাইট, লাইন নম্বর, স্বয়ংক্রিয় ইনডেন্ট
  • একাধিক ফাইল ও আনো; ফাইল ব্রাউজারের স্টোরেজে সংরক্ষিত
  • ▶ চালাও (ইন্টারপ্রেটার), ⚙ কম্পাইল (arm64 macOS বাইনারি ডাউনলোড), ■ থামাও
  • stdin ও আর্গুমেন্ট দেওয়ার ঘর, বাংলা/লাতিন অঙ্ক বদল, ত্রুটির লাইনে ক্লিক করে যাওয়া
সংস্করণখোলাচালানোনেটিভ কম্পাইলবাইনারি চালানো
ওয়েবshobdo-ide.htmlহ্যাঁহ্যাঁ (ডাউনলোড)না
macOSShobdo Studio.appহ্যাঁহ্যাঁহ্যাঁ, অ্যাপের ভেতরে
WindowsShobdo-Studio.cmdহ্যাঁহ্যাঁ (arm64 macOS বাইনারি)না; Windows-এ এখনো পরীক্ষা হয়নি

২১বর্তমান সীমাবদ্ধতা

  • নেটিভ কম্পাইলার শুধু Apple silicon (arm64) macOS-এ চলে; Windows ও Linux কোড-জেনারেটর এখনো নেই।
  • নেটিভে শুধু পূর্ণসংখ্যা (৬৩ বিট, সীমা ছাড়ালে ত্রুটি); দশমিক এখনো নেই। ইন্টারপ্রেটার double ব্যবহার করে, যা ২৫৩ পর্যন্ত নিখুঁত।
  • নেটিভে এখনো garbage collector নেই।
  • রানটাইম ত্রুটিতে শুধু লাইন থাকে, কলাম নয়।
  • বড়()/ছোট() এখন শুধু ASCII অক্ষরে কাজ করে।
  • অপেক্ষা ও অন্যান্য সংরক্ষিত কীওয়ার্ড এখনো কিছু করে না।
  • খালি {} রাশি হিসেবে মানচিত্র হয়, ব্লক নয়।
  • শব্দ ওয়েব ফ্রেমওয়ার্ক, মোবাইল ও ML লাইব্রেরি এখনো পরিকল্পনা পর্যায়ে।