使用运算符优先级解析器解析正则表达式?

时间:2017-11-07 08:07:18

标签: regex parsing

是否可以使用

解析正则表达式

https://en.wikipedia.org/wiki/Operator-precedence_parser

如果没有,例如在这里使用什么解析器

https://en.wikipedia.org/wiki/Thompson“s_construction#Application_of_the_algorithm

您诚挚的

1 个答案:

答案 0 :(得分:1)

我认为正则表达式不存在Operator Precedence Grammar,如果是这种情况,则不能使用运算符优先级解析器。

这是正则表达式的语法,我从a Perl-style one简化了

<RE>    ::=     <union> | <simple-RE>
<union>     ::= <RE> "|" <simple-RE>
<simple-RE>     ::=     <concatenation> | <basic-RE>
<concatenation>     ::= <simple-RE> <basic-RE>
<basic-RE>  ::= <star> | <plus> | <elementary-RE>
<star>  ::= <elementary-RE> "*"
<plus>  ::= <elementary-RE> "+"
<elementary-RE>     ::= <group> | <any> | <char>
<group>     ::=     "(" <RE> ")"
<any>   ::=     "."
<char>  ::=     any non metacharacter | "\" metacharacter

请注意,<concatenation>右侧有两个相邻的非终结符号,这意味着这不是运算符优先级语法。

我认为解析正则表达式的选择方法可能是Recursive Descent parser