我正在嘗試使用pyparsing編寫簡化的正則表達式解析器(除了串聯之外,還支持*
和|
運算符)。下面是我的語法迄今:使用pyparsing解析正則表達式
from pyparsing import alphas, Word, Forward
regular_expression = Forward()
character = Word(alphas, max=1)
group = '(' + regular_expression + ')'
star = (character | group) + '*'
# A 'concat_expression' is any string concat of the above
# String concat with a 'concat_expression' also produces a 'concat_expression'
concat_expression = Forward()
concat_expression << ((character | group | star | concat_expression) +
(character | group | star))
or_expression = regular_expression + '|' + regular_expression
regular_expression << or_expression | concat_expression
我得到無限遞歸當我嘗試解析簡單的表達式(如regular_expression.parseString("a")
)。我的連接定義有什麼問題嗎?
僅供參考,我在嘗試改編this語法。