【发布时间】:2018-05-18 14:43:16
【问题描述】:
我需要写一个由以下 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# 中为这个表达式创建解析器?
【问题讨论】:
-
为什么没有定义
<expr_num>?你能提供一些代码吗? -
有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 你需要一个解析器!
标签: c# regex regular-language bnf ebnf