在 Rascal 中使用不区分大小写的关键字(解决方法)

Use case-insensitve keywords in Rascal (workaround)

有人知道如何在 Rascal 中以不区分大小写的方式保留关键字吗?

由于 GitHub (https://github.com/usethesource/rascal/issues/968) 上报告的问题 #968,我不能简单地使用单引号。这个问题很可能会得到解决。因为我目前正在使用一种关键字不区分大小写的语言,并试图分析其中有人显然随机应用驼峰式或关键字中所有大写字母的代码,但是,我正在寻找一种解决方法。现在我只是用三种方式定义每个关键字。由于camelcase的应用有错误,(比如GroupbyGroup,在camelcase中应该是GroupByGroup)我不得不以更多不同的方式重新定义关键字。因此,我希望有人知道更好的解决方法(或者可以明显解决这个问题)。

以下语法自动扩展以定义'abc'的含义

lexical CaseInsensitive = 'abc';

像这样:

lexical CaseInsensitive = 'abc';
lexical 'abc' = [aA][bB][cC];

你也可以自己为你的语法做这件事,但这不会改变消歧的语义。 \ 表示法还没有从上下文无关语言中减去 [aA][bB][cC] 生成的常规语言。未实现。

一个好的临时解决方法是保持语法歧义,并使用流氓代码过滤出正确的树。