在Python中从前缀regex创建表达式树?

时间:2013-02-13 22:37:26

标签: python regex prefix

我在前缀表示法中给出了一个正则表达式,如下所示:

(r* (r. r| a ( r. b b) (r. c (r* c))) a))

其中:

c (for any char c) means "regex accepting the single-character string c"
r. means "regex accepting the empty string"
r/ means "regex accepting nothing"
(r| r1 r2 ...) means "r1 union r2 union ..."
(r. r1 r2 ...) means "r1 concat r2 union ..."
(r* r1) means "r1*"

如果将上述正则表达式作为输入,我将如何将其解析为表达式树?它不能只是在空白处拆分,因为某些术语中有空格,所以我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

我开始通过分解括号与原子表达式来攻击它。像这样的BNF:

<expr> ::= "(" <paren-expr> ")"
         | <atomic-expr>

<exprs> ::= <expr>
          | <expr> <space> <exprs>

<atomic-expr> ::= <empty-expr> | <nothing-expr> | <char>

<paren-expr> ::= <union-expr> | <concat-expr> | <star-expr>

<union-expr> ::= "r|" <space> <exprs>

<star-expr> ::= "r*" <space> <expr>

希望您可以填写其余部分,并弄清楚如何将其转换为实际的可执行解析器。