簡體   English   中英

使用pyparsing解析簡單語法時出錯

[英]Error in parsing a simple grammar with pyparsing

我正在嘗試使用級聯,分離和克利恩星解析一個簡單的正則表達式語法。 我的語法和測試如下所示:

from pyparsing import Word, nums, Forward, Suppress, OneOrMore

#A grammar for a simple class of regular expressions
number = Word(nums)('number')
lparen = Suppress('(')
rparen = Suppress(')')

expression = Forward()('expression')

concatenation = expression + expression
concatenation.setResultsName('concatenation')

disjunction = lparen + OneOrMore(expression + Suppress('|')) + expression + rparen
disjunction.setResultsName('disjunction')

kleene = lparen + expression + rparen + Suppress('*')
kleene.setResultsName('kleene')

expression << number | concatenation | disjunction | kleene

#Test a simple input
tests = """
7
23
(7)*
(45)*
(1|2|3)
((2)*|3)
((0|1))*
""".splitlines()

for t in tests:
    print t
    print expression.parseString(t)
    print

但是,該程序在第一次測試時失敗:

Traceback (most recent call last):
  File "main.py", line 34, in <module>
    print expression.parseString(t)
  File "/home/elliot/miniconda2/lib/python2.7/site-packages/pyparsing.py", line 1216, in parseString
    raise exc
pyparsing.ParseException: Expected W:(0123...) (at char 0), (line:1, col:1)

這是什么問題 同樣,對我的語法的任何其他反饋(即,我如何能做得更好/更簡單)也將不勝感激。

第一個測試不是"7" 第一個測試是"" ,因為您的tests字符串以空行開頭。 ""與您語法中的有效表達式不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM