【问题标题】:What characters are usable in a variable name in ObjectScript on a "Unicode" installation?在“Unicode”安装中,哪些字符可用于 ObjectScript 中的变量名?
【发布时间】:2023-04-06 19:44:01
【问题描述】:

我有一个用于 ObjectScript 的解析器(Java 中),它运行良好,除了一件事:我不解析“Unicode 变量名”。

问题在于文档对这个主题的解释性不是很好;更重要的是,它错误地将 Unicode 定义为“16 位”。这告诉我只允许 BMP 中的字符。

但是哪些呢? JDK is frighteningly high 和脚本 aren't any better 中定义的 Unicode 块数。

我也许可以使用Character.isLetter()(请注意,我选择了带有 char 而非 int 的版本),但我确信即使这样也会太大...

【问题讨论】:

    标签: java intersystems-cache objectscript


    【解决方案1】:

    Eduard 非常正确,即局部变量可以从百分比或“字母”字符开始,然后是“字母”字符或数字。

    [\p{Alphabetic}%][\p{Alphabetic}\d]*
    

    这里最重要的是要注意 - 什么是“字母”?这意味着当前 Caché 语言环境中的拉丁字母或字母。 IE。安装俄语/Unicode 语言环境后,您可以编写如下内容:

    set порусски = 1
    

    或在日语区域内:

    USER>set a=$c(12354)
    
    USER>set @a=88
    
    USER>write
    
    a="あ"
    あ=88
    

    【讨论】:

    • 哎呀。那么这是否意味着在某个国家/地区编写的代码,使用仅在该国家/地区可用的字符,甚至无法在用于另一个国家/地区的 Caché 安装上编译??
    • 可能是,取决于区域设置。对不起! [虽然上述日文名称在俄语/Unicode 语言环境中是可以的] 这就是为什么我们禁止在我们的本地 COS Guidelines 中在全局、本地或类型名称中使用俄语名称。
    • 在任何情况下,无论您在哪里编写用于突出显示或验证的解析器,都不应尝试精确。通常,更实用的方法是只允许实际编译器接受的“足够好”的语法超集。因此,在这种情况下,通用 Unicode 字母属性足以很好地近似 Unicode 缓存的 NLS 语言环境中的现实生活复杂性。
    • 请注意,据我了解,\p{Alphabetic} 可以匹配我所了解的 BMP 之外的代码点;根据rfg's answer,这些都是无效的!
    【解决方案2】:

    请参阅文档 herehere。总结一下:

    局部变量名必须是有效的标识符。它的第一个字符必须是字母或百分号 (%) 字符。以“%”字符开头的变量名被称为“百分比变量”并且有不同的范围规则。

    【讨论】:

    • 我知道这些文档。不清楚的是 BMP 之外的代码点是否有效。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2017-06-02
    • 2010-12-12
    相关资源
    最近更新 更多