Salam❤️ 我是吉森的初学者。 日复一日地学习小东西。 我如何与 Jison 一起使用孟加拉数字? 我的意思是,我如何使用jison并使用孟加拉数字作为数字令牌并使用它们(结果号必须为孟加拉语) 我使用了正则表达式,但它不仅仅是措辞标记化 请帮助我 ❤️ 谢谢
Jison 不会尝试在数字和字符串之间进行转换。它所做的只是确定输入中的数字在哪里以及它们与输入中的其他令牌的关系。这就是解析的意义所在:将文本分成几部分。剩下的就是解释,为此你需要使用你正在使用的编程语言,在本例中是JavaScript。
不幸的是(有点令人惊讶)JavaScript的Unicode支持不是很完整。特别是,它不提供 Unicode 字符数据库 (UCD) 或该数据库中的 Unicode 属性的任何官方接口,除了实现 Unicode 正则表达式匹配子集所需的最小接口(并且仅当正则表达式设置了u
标志时)。所以你不能做看起来合乎逻辑的事情,那就是查阅每个角色的Numeric_Value属性。
但是,由于您只对孟加拉语数字感兴趣,而不是Unicode可以表示的所有脚本中的数字,因此对翻译进行硬编码是合理的。因此,您可以使用以下命令将孟加拉语数字转换为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
,但在孟加拉数字的情况下,它根本没有区别。
请注意,上述内容不处理逗号,无论是输入还是输出。如果要编写৮৭৬৫৪৩২
作为৮৭,৬৫,৪৩২
,则需要编写更多代码。