問題タブ [lex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - Flex (アクションスクリプトなどではなく Lex) エラー
私はフレックスがまったく初めてです。
flex を使用するとビルド エラーが発生します。つまり、flex を使用して .c ファイルを生成しました。実行すると、次のエラーが発生します。
これが私が使用しているlexファイルです(ここから取得):
また、lex 構文コードに「main」関数を入れる必要があるのはなぜですか? 私が望むのは、yylex(); を呼び出せるようにすることです。別のcファイルから。
yacc - yaccのコマンドライン引数から解析する方法は?
yaccのコマンドライン引数から解析する方法は?
もちろん、私はlexとyaccの両方で入力を未定義にしてから、
ここで、targetにはコマンドライン引数が含まれています。しかし、標準入力だけが、disinput関数を実行させる方法を実行しています。
c - 字句解析器の出力は c ではどうあるべきですか?
このコードがレクサーを介して渡された場合の出力
c++ - フレックス/バイソン、エラー:宣言されていません
ハロー、私は問題があります、次のプログラムはエラーを返します、エラー::宣言されていません(関数での最初の使用)、なぜこのエラーが表示されるのかすべてのトークンが宣言されていますが、このエラーが発生します、誰もが私を助けることができます、ここにlexとyacfiles.thanks
lex:
YACC:
c - cでレクサーをコーディングする際のエラー
このコードでは、私のsource.txtにif(a + b)が格納されています。ただし、(、+、および)のみがlext.txtに書き込まれ、識別子ifまたは変数aおよびbには書き込まれません。特別な理由はありますか?
c - Bison/Yacc 文法における意図しない連結
私は lex と yacc を試していて、奇妙な問題に遭遇しましたが、問題を詳しく説明する前に私のコードをお見せするのが最善だと思います。これは私のレクサーです:
これは私のパーサーです:
文字列と整数、および基本的な REPL だけで構成される、非常に単純な言語。ここで、パーサーで、引数が先頭のコロンで出力されることに注意してください。意図は、ステートメントの規則の最初のパターンと組み合わせると、REPL との相互作用が次のようになります。
ただし、相互作用は次のとおりです。
次のルールでトークン ID が
改行を含めて、入力文字列全体の意味値を持っていますか? 意図した対話ができるように、どのように文法を作り直すことができますか?
c - ac ファイルから yacc を呼び出すには?
yacc を使用してコマンド ラインを解析したいが、ac ファイルから呼び出したい。どのように可能ですか?
lex - lexで認識されないルール
私はlexでプログラムを書いていますが、次のエラーが発生します。
Scanner.l:49:認識されないルール
49行目は次のとおりです。{number} {return(NUM);}
編集:ただし、エラーはその直前の行に関連しているよう{id} {return(ID);}
です。空白の場合でも、そのルールの直後の行がエラーの原因としてリストされます。
これが私のコードです:
そのルールの何が問題になっていますか?ありがとう。
c++ - 言語のような小さなPythonを開発する際のインデント制御
私はflex、byacc(字句および構文解析用)およびC ++を使用して言語のような小さなPythonを開発していますが、スコープ制御に関していくつか質問があります。
Pythonと同じように、インデントに空白(またはタブ)を使用しますが、それだけでなく、たとえば、別のwhileループ内にあるwhileループ内に「break2」と入力した場合のように、インデックスブレークを実装したいのですが、最後の1つですが、最初のループからも(したがって、ブレーク後の番号2)などです。
例:
しかし、スコープがいつ終了するかを確認するための「アンチ」タブ文字がないため(たとえば、Cのように「}」文字を使用するだけです)、この方法が最適かどうか疑問に思いました。
externを使用してlexファイルでアクセスするyaccファイルに「inttabIndex」のようなグローバル変数を定義します。次に、lexファイルでタブ文字を見つけるたびにその変数を1ずつインクリメントします。yaccファイルを解析するときに「break」キーワードを見つけた場合は、tabIndex変数からその後に入力した量だけデクリメントします。コンパイル後にEOFに到達し、tabIndex!= 0を取得すると、コンパイルエラーが出力されます。
問題は、インデントが減少したかどうかを確認するための最良の方法は何ですか?lexから\ b(バックスペース)文字を読み取ってから、tabIndex変数を減少させる必要があります(ユーザーがbreakを使用しない場合)?
これを達成する別の方法は?
また、もう1つの小さな質問ですが、すべての実行可能ファイルにstart()という関数の開始点を持たせたいのですが、これをyaccファイルにハードコーディングする必要がありますか?
長い質問で申し訳ありませんが、どんな助けでも大歓迎です。また、誰かがpython用のyaccファイルを提供できる場合は、ガイドラインとして役立ちます(Googleで調べてみましたが、運がありませんでした)。
前もって感謝します。
yacc - lexとyaccは最適化されたコードを提供しますか?
LexとYaccは最適化されたコードを提供しますか、それともパフォーマンスを向上させるために独自のコードを手動で作成する必要がありますか?