2015-10-28 2 views
1

Я хочу объявить с обозначением EBNF ключевым словом, то есть switch.Объявить нечувствительное к регистру ключевое слово с EBNF

<keyword_switch> ::= "switch"; 

Есть ли способ объявить ключевое слово как нечувствительное к регистру без объявления всех возможных комбинаций букв?

Я думаю, что следующее заявление правильно (но unsire, я новичок с EBNF):

<keyword_switch> ::= ("S"|"s")("W"|"w")("I"|"i")("T"|"t")("C"|"c")("H"|"h"); 

, но это не очень читаемым. Есть ли еще более простой способ?

ответ

1
<keyword_switch> ::= ("S"|"s")("W"|"w")("I"|"i")("T"|"t")("C"|"c")("H"|"h"); 

, кажется, хорошо с ANTLR - http://www.antlr3.org/pipermail/antlr-interest/2007-August/023267.html

Еретик, как это может показаться, я предложил бы

<keyword_switch> ::= "switch" | "Switch" | "SWITCH"; 

при условии, что sWitch и sWiTcH и т.д., вряд ли то, что пользователь понадобиться.

+0

Но он не будет чувствителен к регистру. Если нет простого решения, я сохраню свой код для реальной нечувствительности к регистру. – Jepessen

+0

Да, это не так. Для реального случая безвредности ANTLR, например, имеет [Aa] токены или фрагменты - http://stackoverflow.com/a/22160240/4007818 – rns

+0

С другой стороны, у Marpa есть модификаторы:: ic и «i» для реальной нечувствительности к регистру - https://metacpan.org/pod/distribution/Marpa-R2/pod/Scanless/DSL.pod#Single-quoted-strings – rns