Я пишу компилятор. Я только начинаю, поэтому создаю сканер (или Lexer). В настоящее время я пишу некоторые регулярные определения, которые будут обработаны моим сканером. Попытка создать одну из них, я бег в следующей проблеме:Регулярное выражение - странное поведение
я тестирование, в RegExr, следующее (невероятно простой) регулярное выражение:
r = /(a|ab)/
Где «г» является регулярным определением; Я имею в виду, что регулярное выражение просто (a|ab)
.
Я думал, что язык L (г) будет (согласно книге Compilers: Principles, Techniques and Tools):
L(r) = {a, ab}
Удивительно, но инструмент соответствует {a}
!
Так что мой вопрос: почему такое поведение?
'' 'в regex - это генератор переменного тока, то есть ваше регулярное выражение будет соответствовать' a' _or_ 'ab'. Вы хотите, чтобы он соответствовал 'a' _followed by_' ab'? –
Привет @JamesThorpe, на самом деле я не хочу «находить» регулярное выражение. То, что я ищу, - это понять странное поведение. –