如何将孟加拉数字标记为数字并使用它们?

how to tokenize bangla digits as nunbers and work with them?

萨拉姆❤️ 我是 Jison 的初学者。 日复一日地学习小东西。 我如何与 Jison 一起使用 Bangla Numbers? 我的意思是,我如何使用 jison 并使用 Bangla 数字作为 NUMBER 标记并使用它们(结果数字必须在 BANGLA 中) 我使用了正则表达式,但它不只是措辞分词 请帮助我❤️ 谢谢

Jison 不会尝试在数字和字符串之间进行转换。它所做的只是识别输入中数字的位置以及它们与输入中其他标记的关系。这就是解析的意义所在:将文本分成几部分。剩下的就是解释,为此你需要使用你正在使用的编程语言,在这种情况下 JavaScript.

不幸的是(并且有点令人惊讶)JavaScript 的 Unicode 支持不是很完整。特别是,它不提供任何官方接口到 Unicode 字符数据库 (UCD) 或该数据库中的 Unicode 属性,除了实现 Unicode 正则表达式匹配子集所需的最低限度(并且仅当正则表达式具有 u 标志设置)。所以你不能做看起来合乎逻辑的事情,即查阅每个字符的 Numeric_Value 属性。

但是由于您只对 Bangla 数字感兴趣,而不对 Unicode 可以表示的所有脚本中的数字感兴趣,因此对翻译进行硬编码是合理的。因此,您可以使用

将 Bangla 数字转换为 JavaScript 数字(即,不是字符串)
const numberFromBangla =
    str => +(str.replace(/[\u09e6-\u09ef]/g,
                         digit => String.fromCharCode(digit.charCodeAt(0)-2486)))

并使用

将数字转换回孟加拉字符串
const banglaFromNumber =
    n => ("" + n).replace(/[0-9]/g,
                          digit=>String.fromCharCode(digit.charCodeAt(0)+2486))

对于更现代的 JavaScript,您可以使用 replaceAll 而不是 replace(没有 g 标志)。如果您的 Javascript 环境支持,您也可以使用 codePointAt 而不是 charCodeAt,但对于孟加拉数字,它根本没有区别。

请注意,以上内容不处理输入或输出的逗号。如果你想把 ৮৭৬৫৪৩২ 写成 ৮৭,৬৫,৪৩২,你需要多写一些代码。