Marpa中的不区分大小写匹配

7

关于我之前的问题,涉及到使用正则表达式进行不区分大小写的关键字匹配。

Marpa中是否可以进行不区分大小写的字符串匹配?如果可以,如何实现?

假设我有以下语法:

:start ::= script
identifier ~ [\w]+
script ::= 'script' identifier code
code ::= command*
command ::= 'run' | 'walk' | 'stop'

我该如何使其匹配任何大小写组合的 script, Script, SCRIPT 或其他字母?


仅使用7位ASCII码,您最喜欢的操作系统上的扩展8位ASCII编码,还是完整的Unicode? - hippietrail
由于所涉及的项目是用Perl编写的,我认为数据的正确编码取决于Perl的处理。但是,由于语法是针对编程语言的,对于标识符来说,7位ASCII码已经足够了。 - onitake
Perl可能是编程语言中对不同编码提供最全面支持的语言。但我不确定Marpa是否直接使用Perl的正则表达式或重新实现了一个有限的子集。但通常在任何语言中,当面对这种情况时,我总是使用像[sS][cC][rR][iI][pP][tT]这样的正则表达式。 - hippietrail
当然有可能,但这会让任何语法都变得更难阅读,尤其是如果有很多标识符的话。 - onitake
1个回答

3

没有一种直接的方法可以指定不区分大小写。当然,您可以串联字符类:[sS][cC][rR][iI][pP][tT],但那太笨拙了。

很抱歉。不区分大小写的字符串将是一个很好的功能补充。

更新:截至2.076000,最新的索引发布版,Marpa::R2现在具有:ic修饰符,可用于字符串和字符类,使它们不区分大小写。在文档中,请参见https://metacpan.org/pod/Marpa::R2::Scanless::DSL#Single-quoted-stringshttps://metacpan.org/pod/Marpa::R2::Scanless::DSL#Character-classes


我明白了。还有其他影响G0解析器的方法吗?比如在发送到比较之前插入将字符串转换为小写的代码?我能想到的另一个解决方案是预解析输入,并首先将与关键字匹配的所有内容转换为小写。这可能可以使用普通的s///完成。 - onitake
1
可以绕过G0解析器并使用自己的扫描器:https://metacpan.org/module/JKEGL/Marpa-R2-2.062000/pod/Scanless/R.pod#Internal-and-external-scanning。我必须将不区分大小写添加到我的新功能优先级列表中。 - Jeffrey Kegler
谢谢,我会看一下。 - onitake
在方括号内,圆括号失去了它们的特殊性。 - Jeffrey Kegler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接