2 yo'q to'qson 90 2 yo'q yuz kishi 100 3 yo'q …
…
3 yo'q to'qqiz yuz 900 3 yo'q ming/ming / ming 1.000 4 ha million / million / million 1.000.000 5 ha …
…
…
ha kvadrillion / kvadrillion / kvadrillion 1.000.000.000.000.000 8 ha
Aslida, ushbu jadvalga boshqa har qanday belgilar, shu jumladan xorijiy tillar uchun ham qo'sha olasiz, faqat ba'zi mamlakatlarda raqamlar nomining qisqa tizimi emas, balki uzoq vaqtdan beri foydalanilishini unutmang.
Endi parsingga o'taylik. To'rt kattalikni oling:
Global daraja (globalLevel). Oxirgi multiplikatorning qaysi darajasi borligini ko'rsatadi. Dastlab, u aniq emas va nazorat qilish uchun zarur. Agar biz darajadan kattaroq yoki global darajaga teng bo'lgan multiplikator belgisi bilan uchrashsak, bu xato. Global ahamiyatga ega (globalValue). Mahalliy raqam va multiplikatorning ko'payishi natijasida hosil bo'lgan umumiy summator. Mahalliy daraja (localLevel). Oxirgi belgining qaysi darajasi ekanligini ko'rsatadi. Dastlab u aniqlanmagan, u global darajaga o'xshash ishlaydi, lekin multiplikator aniqlangandan keyin qayta tiklanadi. Mahalliy qiymat (localValue). Multiplikatorlar bo'lmagan belgilar, ya'ni 999gacha bo'lgan raqamlar.
Algoritm quyidagicha:
Satrni "\s + " muntazamligi bilan belgilarga aylantiring. Biz keyingi belgini olamiz, biz u haqida namunadan ma'lumot olamiz. Agar bu multiplikator bo'lsa: Agar global daraja belgilangan bo'lsa, unda biz bu token darajasidan kattaroq yoki teng ekanligiga ishonch hosil qilamiz. Agar yo'q bo'lsa, bu xato, raqam to'g'ri emas.