2014-06-12 2 views
0

Я пытаюсь написать lexer с ocamllex для некоторого специального родного языка (который немного изменен для моих целей). Некоторые слова должны совпадать с их первым символом, который удваивается. Но я не нахожу никакого способа выразить это повторение первого символа. Ни я не могу использовать регулярное выражение синтаксисаПовторение совпадения с регулярным выражением в ocamllex

([ 'а' - 'г']) \ 1 [ 'а' - 'г'] +

с этим "\ 1". Ocamllex говорит «незаконная escape-последовательность \ 1». и я думаю, что это действительно хорошо с синтаксисом escape-выражений, но я уверен, что это не то, что я хотел. Также можно использовать синтаксис повторения с фигурными скобками в любом случае (но это обыкновением решить эту проблему так или иначе):

[ «а» - «г»] {2} [ «а» - «г»] +

Я думаю, что существует конфликт с кодом oCaml в фигурных скобках после регулярного выражения.

У кого-нибудь есть идея?

большое спасибо.

ответ

1

Регулярное выражение Ocamllex не имеет синтаксиса повторения. Avaibable синтаксис регулярных выражений просто как указано в справочном руководстве:

http://caml.inria.fr/pub/docs/manual-ocaml-4.01/lexyacc.html#sec274

И я думаю, что вы можете вручную перечислить все возможные повторы, как показано ниже:

("aa"|"bb"|"cc"|"dd"|"ee"|"ff"| ..............)['a'-'z']+ 
+0

спасибо за проверку моих подозрений. : D это не очень хорошее решение, но необходимое ... о Caml. – user3734280