Регулярное выражение для lex - PullRequest
0 голосов
/ 25 мая 2009

Я занимаюсь разработкой простого переводчика с MathML на Latex, используя Lex и Yacc. В моем файле lex, содержащем правила регулярных выражений, я определил один для арифметических операторов [- + * = /]. Я хочу расширить его, чтобы он распознавал плюс-минус (+ -) и невидимые времена ('& InvisibleTimes'), но я не знаком с регулярным выражением и мне нужна помощь.

Ответы [ 3 ]

2 голосов
/ 25 мая 2009

Хотелось бы что-нибудь подобное?

(?:[-+*=/]|\+-|&InvisibleTimes)
1 голос
/ 25 мая 2009

Попробуйте это:

([-+*=/]|\+-|&InvisibleTimes)

Обратите внимание, что вам нужно экранировать + в +-, потому что это оператор вне классов символов. Вы можете сделать это с помощью обратной косой черты (как я сделал здесь) или с двойными кавычками. (Синтаксис двойных кавычек довольно необычен - большинство других реализаций регулярных выражений используют только обратную косую черту для экранирования, поэтому я склонен использовать обратную косую черту, поскольку это делает регулярное выражение более «обычным».)

0 голосов
/ 25 мая 2009

Я не очень знаком с MathML, поэтому у меня проблема с вами. Как уже говорили другие, вы можете сделать все это в одном регулярном выражении, например:

[-+*=/]|\+-|&InvisibleTimes

Однако, если вы хотите иметь разные действия, связанные с каждым из них, вам нужно сделать это так:

[-+*=/]            {/* action 1 here */}
\+-                {/* action 2 here */}
&InvisibleTimes    {/* action 3 here */}
...