Используйте нечувствительные к регистру ключевые слова в Rascal (обходной путь)

Кто-нибудь знает, как я могу зарезервировать ключевое слово без учета регистра в Rascal?

Из-за проблемы № 968, как сообщается на GitHub (https://github.com/usethesource/rascal/issues/968) Я не могу просто использовать одинарные кавычки. Вероятно, этот вопрос будет решен. поскольку в настоящее время я работаю с языком, в котором ключевые слова не чувствительны к регистру, и пытаюсь проанализировать код, в котором кто-то явно случайным образом применил верблюжий регистр или все заглавные буквы в ключевых словах, я ищу обходной путь. Пока я просто определяю каждое ключевое слово тремя способами. Поскольку в применении верблюжьего регистра есть ошибки (например, GroupbyGroup, которая должна была быть GroupByGroup в верблюжьем регистре), мне все время приходится переопределять ключевые слова еще более разными способами. Поэтому я надеялся, что кто-нибудь узнает о лучшем обходном пути (или, очевидно, сможет решить эту проблему).


person Olav Trauschke    schedule 24.06.2016    source источник


Ответы (1)


Следующая грамматика автоматически расширяется, чтобы определить, что означает 'abc'

lexical CaseInsensitive = 'abc';

вот так:

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

Вы можете сделать это и самостоятельно для своей грамматики, но это не изменит семантику устранения неоднозначности. Нотация \ просто еще не вычитает обычные языки, сгенерированные [aA][bB][cC], из контекстно-свободного языка. Это не реализовано.

Хорошим временным решением было бы сохранить неоднозначность грамматики и использовать мошеннический код для фильтрации правильного дерева.

person Davy Landman    schedule 24.06.2016
comment
Спасибо за ответ. Не идеальная ситуация, как вы сами заявили, но, безусловно, некоторые полезные варианты, которые можно рассмотреть в качестве обходных путей. - person Olav Trauschke; 24.06.2016
comment
Правильно. нам нужно добавить эту функцию. в коде есть несколько TODO. - person Jurgen Vinju; 25.06.2016