3

私は pyparsing の初心者で、例を読んで、ここを見て、いくつか試してみました。文法を作成し、バッファーを提供しました。しかし、私は昔から lex/yacc に深いバックグラウンドを持っています。

一般的な質問が 1 つまたは 2 つあります。

現在見てます

ParseException: 予想される行末 (文字 7024)、(行 213、列:2)

そして、それは終了します

私のバッファの性質上、改行には意味があります。

ParserElement.setDefaultWhitespaceChars('') # <-- zero len string

このエラーは、プロダクションのどこかに を探してLineEnd()いるルールがあり、そのルールがたまたま「最後」になったことを意味しますか?

死んでいる場所は「ファイルの終わり」です。使用してみparseFileましたが、ファイルに chars > ord(127) が含まれているため、代わりにメモリにロードし、すべての > ord(127) 文字をフィルタリングしてから を呼び出しparseStringます。

verbose_stacktrace=True問題が発生したと思われる文法の要素のいくつかを有効にしてみました。

ParserElementこのようなエラーが発生したときに認識しようとしている正確なものを追跡するより良い方法はありますか? または、「スタックまたは最近認識された本番トレースを取得できますか?」

ここで編集できることに気づきませんでした...私のクラッシュは次のとおりです。

[centos@new-host /tmp/sample]$  ./zooparser.py 
!(zooparser.py) TEST test1: valid message type START
Ready to roll
Parsing This message: ( ignore leading>>> and trailing <<< ) >>>

ZOO/STATUS/FOOD ALLOCATION//
TOPIC/BIRD FEED IS RUNNING LOW//
FREE/WE HAVE DISCOVERED MOTHS INFESTED THE BIRDSEED AND IT IS NO
LONGER USABLE.//

<<<
Match {Group:({Group:({Group:({[LineEnd]... "ZOO" Group:({[LineEnd]... "/" [Group:({{{W:(abcd...) | LineEnd | "://" | " " | W:(!@#$...) | ":"}}... ["/"]...})]... {W:(abcd...) | LineEnd | "://" | "    " | W:(!@#$...)}}) "//"}) Group:({LineEnd "TOPIC" {Group:({[LineEnd]... Group:({"/" {W:(abcd...) | Group:({W:(abcd...) [{W:(abcd...)}...]... W:(abcd...)}) | Group:({{{"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'"}... | Group:({{"0123456789"}... ":"})} {W:(abcd...) | Group:({W:(abcd...) [{W:(abcd...)}...]... W:(abcd...)})}}) | "-"}})})}... [LineEnd]... "//"})}) [Group:({LineEnd "FREE" Group:({[LineEnd]... "/" [Group:({{{W:(abcd...) | LineEnd | "://" | "  " | W:(!@#$...) | ":"}}... ["/"]...})]... {W:(abcd...) | LineEnd | "://" | "    " | W:(!@#$...)}}) "//"})]...}) [LineEnd]... StringEnd} at loc 0(1,1)
Match Group:({Group:({[LineEnd]... "ZOO" Group:({[LineEnd]... "/" [Group:({{{W:(abcd...) | LineEnd | "://" | "  " | W:(!@#$...) | ":"}}... ["/"]...})]... {W:(abcd...) | LineEnd | "://" | "    " | W:(!@#$...)}}) "//"}) Group:({LineEnd "TOPIC" {Group:({[LineEnd]... Group:({"/" {W:(abcd...) | Group:({W:(abcd...) [{W:(abcd...)}...]... W:(abcd...)}) | Group:({{{"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'"}... | Group:({{"0123456789"}... ":"})} {W:(abcd...) | Group:({W:(abcd...) [{W:(abcd...)}...]... W:(abcd...)})}}) | "-"}})})}... [LineEnd]... "//"})}) at loc 0(1,1)
Match Group:({[LineEnd]... "ZOO" Group:({[LineEnd]... "/" [Group:({{{W:(abcd...) | LineEnd | "://" | "  " | W:(!@#$...) | ":"}}... ["/"]...})]... {W:(abcd...) | LineEnd | "://" | "    " | W:(!@#$...)}}) "//"}) at loc 0(1,1)
Exception raised:None
Exception raised:None
Exception raised:None
Traceback (most recent call last):
  File "./zooparser.py", line 319, in <module>
    test1(pgm)
  File "./zooparser.py", line 309, in test1
    test(pgm, zooMsg, 'test1: valid message type' )
  File "./zooparser.py", line 274, in test
    tokens = zg.getTokensFromBuffer(fileName)
  File "./zooparser.py", line 219, in getTokensFromBuffer
    tokens = self.text.parseString(filteredBuffer,parseAll=True)
  File "/usr/local/lib/python2.7/site-packages/pyparsing-1.5.7-py2.7.egg/pyparsing.py", line 1006, in parseString
    raise exc
pyparsing.ParseException: Expected end of line (at char 148), (line:8, col:2)
[centos@new-host /tmp/sample]$  

ソース: http://prj1.y23.org/zoo.zipを参照

4

1 に答える 1