Мне нужно написать регулярное выражение, заданное следующей формой BNF:
<expr_num>:=<var>|<sign>|"("<expr_num>")"|<expr_num><operator_num><expr_num>
Моя попытка:
var=\w*
sign=+|-
operator_num=[+|-|*|/]
Однако, когда я вставляю фразу <expr_num><operator_num><expr_num>
,регулярное выражение находится в бесконечной рекурсии из-за <expr_num>
в начале.
Моя попытка: (?<expr_num>(?<var>(\[(\w+\d*)\]))|(?<sign>([\+|\-]\g<sign>)|(\d*))|(\((\g<expr_num>)\))|(\g<expr_num>[+|*|-|\/]{1}\g<expr_num>))$
Ошибка: recursive call could loop indefinitely
Как решить эту проблему?Как создать парсер в C # для этого выражения?