9

Shakespeareプログラミング言語を試してみたかったので、ここからダウンロードして、を使用してMakefileを実行しましたcd spl-1.2.1 Make

のコンパイルはspl2c、いくつかの警告とともに実行されます。

scanner.l:600: warning, rule cannot be matched
<stdout>:5808: warning: ‘yyunput’ defined but not used

そして、すべての例をコンパイルしようとすると、すべてがうまくいきません。

../spl/bin/spl2c < fibonacci.spl > fibonacci.c
Warning at line 19: equality expected
Warning at line 28: equality expected
Warning at line 30: comment expected
Warning at line 30: comment expected
Warning at line 30: comment expected
Warning at line 30: comment expected
Warning at line 32: comment expected
Warning at line 32: comment expected
Warning at line 32: comment expected
Warning at line 32: comment expected
Warning at line 34: comment expected
Warning at line 34: comment expected
Warning at line 34: comment expected
Warning at line 34: comment expected
Warning at line 36: comment expected
Warning at line 36: comment expected
Warning at line 37: comment expected
Warning at line 37: comment expected
Warning at line 37: comment expected
Warning at line 37: colon expected
Warning at line 40: equality expected
Warning at line 51: comment expected
Warning at line 51: comment expected
Warning at line 51: comment expected
Warning at line 51: comment expected
Warning at line 51: comment expected
Warning at line 51: colon expected
Error at line 59: 'act [roman number]' or 'scene [roman number]' expected
1 errors and 27 warnings found. No code output.

誰かがこれを修正するための正しい方向に私を向けることができますか?私の元のプロジェクトは、デバッグコンパイラに頼るのではなく、splを学習する予定でした(実際には、最終的には独自のコンパイラを作成したいのですが、今は最初のプロジェクトを使い続けたいと思います)。

、、、、を実行してOS X 10.6.2います。gcc version 4.2.1 (Apple Inc. build 5646) (dot 1)flex 2.5.35bison (GNU Bison) 2.3

編集:gotoを必要としない単純なプログラム(例:hello.spl)の場合、最初のACT I /SCENEIを除くすべてのACT/SCENE行を削除することで問題を回避できます。

4

3 に答える 3

23

これは、字句パーサーの正規表現の欠陥です。

私は言語をフォークしました。

問題を修正しました。

原作者に通知しました。

これがあなたの楽しみのための修正を含む言語のリリースです。

まだいくつかの警告がありますが、それらは何にも影響を与えていないようです。他に機能上の問題が見つかった場合はお知らせください。それらを使用して何ができるかを確認します。

(ロフェル-誰もこの問題を気にしないという事実がなければ、これは降霊術になるでしょう。)

于 2010-12-11T18:35:10.263 に答える
5

この問題は、バージョン2.5.4と2.5.33の間のどこかに導入されたFlexのバグが原因です。つまり、シェイクスピアプロセッサが作成されてから、この質問が行われるまでの間にです。このバグには、大文字と小文字を区別しない正規表現(たとえばi{1,3}、ローマ数字のシェイクスピアフレックス仕様の一部)で1文字の引数を使用したブレース反復演算子の使用が含まれます。バグの結果、大文字と小文字が区別されなくなるため、の代わりに大文字と小文字が区別i{1,3}されなくなります。つまり、文字が繰り返されている大文字のローマ数字(シェイクスピアのソースコードでは通常)は正しく識別されません。[iI]i?i?[iI][iI]?[iI]?

カイル・カートメルのマーロウでの変更では、正規表現に小文字ではなく大文字が使用されています。これにより、問題が反転し、大文字のローマ数字のみが確実に機能するようになります。

Flexのバグをhttps://github.com/westes/flex/issues/193として報告しました。公式リリースの前に誰かがそれを必要とする場合、それはFlexへの1行のパッチです。

于 2017-04-08T14:51:22.180 に答える
1

の最初の問題scanner.l:600: warning, rule cannot be matchedは、単語rottenがファイルに2回追加されているため、include/negative_adjective.wordlistそこから単語を削除するだけで、最初の警告が削除されることです。ただし、これで残りは修正されません。私がもっと何かを修正できるかどうかここを見てください。

于 2009-12-22T21:09:41.203 に答える