2016-03-30 15 views
0

私は後で質問するMCVEを作成しようとしていますが、私はideadoneを使用しようとしているオンラインIDEの問題に出くわしました。私は私の地元のPythonで2.7インタプリタを、それを実行した場合ideoneを使用してPLYレクサーを構築できません

下記のリンクのコードは完全に正常に動作します:

http://ideone.com/DpALEU

はしかし、ideoneに、私が得るエラーは以下のとおりです。

ERROR: prog.py:282: No regular expression defined for rule 't_DIRECTIVE' 
ERROR: prog.py:286: No regular expression defined for rule 't_REFERENCE' 
ERROR: prog.py:291: No regular expression defined for rule 't_UNAME' 
ERROR: prog.py:296: No regular expression defined for rule 't_USTRING' 
ERROR: prog.py:301: No regular expression defined for rule 't_UFLOAT' 
ERROR: prog.py:307: No regular expression defined for rule 't_HEX' 
ERROR: prog.py:314: No regular expression defined for rule 't_INTEGER' 
ERROR: prog.py:320: No regular expression defined for rule 't_COMMENT' 
ERROR: prog.py:324: No regular expression defined for rule 't_ID' 
ERROR: prog.py:330: No regular expression defined for rule 't_newline' 
Traceback (most recent call last): 
    File "prog.py", line 338, in <module> 
    File "/usr/lib/python2.7/dist-packages/ply/lex.py", line 901, in lex 
    raise SyntaxError("Can't build lexer") 
SyntaxError: Can't build lexer 

しかし、私はルールを正当に定義しています。例:

def t_REFERENCE(t): 
    r'([a-zA-Z0-9_\-]+)\s*\'([a-zA-Z0-9_\-\.]+)\'' 
    return t 

このエラーの原因は何ですか?

事前に感謝します。

+0

ネストされた一重引用符を疑うでしょう。 –

+0

'r '\#(\ w +)\ s +(。+)''( 't_DIRECTIVE')には' ''文字が含まれていないので、そうは思いません。 –

答えて

1

ideoneはおそらく-OO最適化設定を使用しており、すべてのドキュメントストリングを削除します。その結果、lexモジュールは、スキャナをビルドするときにドキュメントストリングを見つけることができません。パーサーでも同様の問題が発生します。ここで

は醜い回避策です:PLY manualが推奨するきれいな回避策はありhttp://ideone.com/H5rxXK

(次のセクションを参照してください - Pythonの最適化モードを使用して8 - リンクした後、「正しい」リンクをPLYマニュアルのHTMLエラーのため現在動作していません)。残念ながら、それはおそらくideoneのファイルシステム仮想化の結果であるa different errorを生成します。

+0

ありがとうございます。 –

関連する問題