問題タブ [flex-lexer]
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.
thread-safety - Flex で再入可能なレクサーを作成する
フレックス初心者です。フレックスを使用して単純な再入可能なレクサー/スキャナーを作成しようとしています。レクサーの定義は以下のとおりです。以下に示すように、コンパイル エラーが発生します (yyg の問題)。
reentrant.l:
コンパイル エラー:
windows - Flex (アクションスクリプトなどではなく Lex) エラー
私はフレックスがまったく初めてです。
flex を使用するとビルド エラーが発生します。つまり、flex を使用して .c ファイルを生成しました。実行すると、次のエラーが発生します。
これが私が使用しているlexファイルです(ここから取得):
また、lex 構文コードに「main」関数を入れる必要があるのはなぜですか? 私が望むのは、yylex(); を呼び出せるようにすることです。別のcファイルから。
c - Flex + Bisonを使用して末尾再帰関数を認識し、コードを反復形式に変換します
新しい関数定義を受け入れる機能を備えた電卓を書いています。フィボナッチなどの再帰関数を試す初心者の必要性を認識し、電卓でFlex + Bisonを使用して末尾再帰関数を認識し、コードを反復形式に変換できるようにしたいと思います。私はその仕事をするためにFlex&Bisonを使用しています。ヒントやアイデアがあれば、温かく歓迎します。ありがとう!
編集:
Flex&BisonからのCまたはC++出力について心配する必要はありません。主にアイデアやヒントが欲しいです。ありがとう。
grammar - Bison: 単一ルール内のオプションのトークン
GNU Bison 2.4.2 を使用して、取り組んでいる新しい言語の文法を書いていますが、質問があります。ルールを指定するときは、次のように言いましょう。
たとえば、ルールにバリエーションがある場合
どこで(フレックススキャナールールから):
(そして T_IDENT_LIST はカンマ区切りの識別子の規則です)。
「T_EXTENDS T_IDENT_LIST」をオプションとして設定して、これらすべてを1つのルールでのみ指定する方法はありますか? 私はすでに試しました
しかし、バイソンは私にエラーを出しました。
ありがとう
c - yacc/bison や lex/flex がトークン置換などの後にスキャンを再開するにはどうすればよいですか?
トークンを別のものに置き換えた後、bison や flex に強制的にスキャンを再開させる方法はありますか?
私の特定の例は、特定の単語/文字列の置換です。hello
の単語をに置き換えたい場合echo hello
、flex または bison を置き換えてから再度解析を開始するにはどうすればよいですかhello
(1 つではなく 2 つの単語を取得するため)。したがって、次のようになります。
- トークン WORD (文字列型) を取得します。
- の場合
hello
、トークン値をecho hello
- 入力全体の解析を再開します (現在は
echo hello
) - トークン取得 WORD (
echo
) - トークン取得 WORD (
hello
)
のような非常に魅力的な関数を見てきましyyrestart()
たが、特にその関数が実際に何を達成するのかはよくわかりません。どんな助けでも大歓迎です、ありがとう!
2010 年 4 月 23 日更新
私が最終的に使用したハックアンドスラッシュ ソリューションの 1 つは、word
通過するそれぞれについて、「エイリアス」配列をチェックすることです。にエイリアスがある場合word
は、単語の値を (たとえば を使用して) 置き換え、フラグstrcopy($1,aliasval)
をマークします。aliasfound
入力の行全体が 1 回解析されると、aliasfound
フラグが true の場合yy_scan_string()
、バッファの状態を展開されたエイリアスを持つ入力に切り替え、YYACCEPT
.
そのため、メイン関数に飛び出しyyparse()
、バッファがまだ文字列を指している状態で再度呼び出します。これは、エイリアスが見つからなくなるまで続きます。すべての文法アクションが完了したら、呼び出しyyrestart(stdin)
て「通常」モードに戻ります。
エイリアス値を使用して単語を効果的に展開し、stdin
(または他の方法に) 挿入し、基本的にすべてのエイリアス (ネストされていても) を展開する方法を誰かが知っていれば、それは素晴らしいことです。yypush_buffer_state()
私はとyypop_buffer_state()
、 と一緒にいじっていましyy_switch_to_buffer()
たが、継続的な解析作業で「インライン」置換を得ることができませんでした...
grammar - フレックス、マルチラインルール
こんにちは、レクサー定義内にフレックスルールがあります:
このルールをより明確に保つために、より多くの行に分割する方法はありますか?マクロと同じように\を試してみましたが、flexでは受け入れられないようです:(
PS:ルールをより多くのサブルールに分割したくはありませんが、コードを明確に保つために、正規表現をより多くの行に分割するだけです。
visual-c++ - vc++ で bison & flex プログラムをコンパイルするときの unistd.h 関連の問題
vc++ で bison & flex (cygwin 経由でダウンロード) を使用しています。プログラムをコンパイルすると、エラーが発生しました。
Flex によって生成されたファイル内の対応するコードは次のとおりです。
フレックス ファイル (.l) で YY_NO_UNISTD_H を定義すると、このエラーは消えますが、他にもいくつかのエラーが発生します。
この問題を解決するにはどうすればよいですか?
これらのエラーはすべて、flex によって生成されたスキャナーで発生します。
unistd.h が Windows に存在しないためだと思います。独自の unistd.h を作成する必要がありますか? もしそうなら、それらのエラーを排除するためにそれを書く方法は?
c++ - Flex と Bison を使用してスクリプト エンジン内に eval および load 関数を実装する
皆さん、私は flex と bison を使用してスクリプト エンジンを開発しており、現在、この言語の eval 関数と load 関数を実装しています。例を挙げると、構文は次のようになります。
だから、私の字句解析器で私は関数を実装しました:
しかし、うまくいかないようです。まあ、そうですが、文字列(ファイルからロードされたもの、または直接評価されたもの)が終了すると、 sigsegv を取得します:
お気づきかもしれませんが、sigsegv は私のものではなく、flex/bison コードによって生成されます...ヒント、または少なくともこれらの種類の関数を実装する方法の例はありますか?
PS: include ディレクティブの実装に成功しましたが、解析時ではなく実行時 (PHP の include/require ディレクティブのようなもの) で機能するには、eval と load が必要です。
c++ - C++ (C ではない) で bison と flex を使用して簡単な電卓を作成する
bison と flex を使用して単純な C++ 電卓を作成したいと考えています。私はパーサーを作成するのが初めてであることに注意してください。bison/flex で既にいくつかの例を見つけましたが、それらはすべて C で記述されていました。
私の目標は、クラスに値、操作、関数のノードが含まれる C++ コードを作成して、AST を作成することです (評価は、AST 全体を作成した直後に、ルートから開始して実行されます)。
例えば:
次のように解析されます。
2 番目の AST は次のようになります。
次に、次の疑似コードは AST を反映しています。
ここで、expは次のとおりです。
しかし、このようではありません:
このようにして、ノードを作成する代わりに操作の値を直接取得するためです。
Node には type (of operation)、val1 (Node)、val2 (Node) を含める必要があると思います。場合によっては、val2 が NULL になることがあります。たとえば、上記のsqrtのように、最後に 1 つの引数を取ります。右?
ASTでノードを作成/保持する方法を理解するために、上記の問題(ASTを作成する* .yファイルを含む)に対するC++スケルトン(評価なし)を提案していただければ幸いです。アイデアを得るために、コードを切り取ることができます。
また、ご存知の場合は、既存の (おそらく単純な) 例を教えていただければ幸いです。
お時間とご協力ありがとうございました。
flex-lexer - MinGW gcc エラー:「`yylloc' への未定義の参照」
yylloc はどこにありますか? gcc コマンド ラインに libfl.a (-lfl) を含め、GnuWin32/bin および GnuWin32/lib ディレクトリをシステム変数 LIB に追加し、GnuWin32 内のすべてのファイルを検索しました - 私も gcc もそれを見つけることができません。