問題タブ [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.
c - Lex と Yacc で入力文字列全体を取得するには?
よし、これで取り引きだ。
私の言語では、いくつかのコマンドがあります。
そして、私の Lex ファイルで
私のyaccファイルで
私の質問は、どうすればテキスト全体を取得できますか
まだNUMBERを返している間にコマンドに入る?
また、私の Lex が STRING [0-9a-zA-Z]+ を返し、その長さを検証したい場合、次のようにする必要があります
または、実際に長さに応じて異なるトークンを返すトークンが Lex に含まれていますか?
c - Bison の %union 値を初期化するには?
バイソンには組合があります
そしてこんな風に使いたい
レックスでは:
それよりも
簡単にメモリリークを防ぐには
ただし、最初に std::string を sval に割り当てる方法が必要です。
どうやってやるの?
parsing - Yacc ではなく Lex でエラー状態を処理しますか?
次のようなlex正規表現があるとします
ユーザーが入力した場合
一致します
しかし、ユーザーが次のようなことを言った場合
エラーで「文字 K が認識されません。S が必要です」と言ってほしいです。
私が今していることは、次のように書いているだけです
そして、本質的に Yacc で文字列を re-lex して、意味のあるエラー条件を設定できるようにします。
どうすればこれを回避できますか?
私が考えることができる唯一のことは、名前付きグループを使用することですか?
lex - lex.yy.c の「yy」は何の略ですか?
lex.yy.c の「yy」は何の略ですか?
c - Flex(lex)およびBison(yacc)でのエラー処理
バイソンマニュアルから:
各入力が1行である単純な対話型コマンドパーサーでは、エラー時にyyparseが1を返し、それが発生したときに呼び出し元が入力行の残りを無視するようにするだけで十分な場合があります(その後、yyparseを再度呼び出します)。
これは私が望んでいることとほぼ同じですが、仕事に取り掛かるのに苦労しています。基本的には、flexでエラーを検出してエラーを検出し、エラーが検出された場合は、Bisonに行全体を破棄してもらいます。私が今持っているものは、私のコマンドがまだ実行されているため、正しく機能していません:
私のBisonファイル:
そして私のフレックスでは:
c - Flex/LexおよびYacc/Bisonを使用して可変置換を行う方法
ウィキペディアの補間定義 私はフレックス/バイソンを学んでいて、それを使って独自のシェルを書いています。私は変数補間を行うための良い方法を見つけようとしています。これに対する私の最初のアプローチは、ホームディレクトリの〜や$ myVarのようなものをフレックススキャンしてから、ルックアップ関数を使用して返されるものにyyval.stringを設定することでした。私の問題は、テキストが1つのトークンで表示される場合、これは役に立たないということです。
私が変数に対して持っているlex定義:
次に、私の文法には、次のようなものがあります。
この種のことを処理する良い方法を知っている人はいますか?私はこれについてすべて間違っていますか?
g++ - 「yylex()」への未定義の参照
flex と bison を使用して単純なスクリプト言語を作成しようとしています。今、私は電卓を動かそうとしています。
しかし、私はそれをコンパイルすることはできません。このメイクファイルを実行すると:
.l および .ypp ファイルで、次のエラーが発生します。
そして、次のall
ようなコマンドを作成すると:
見つからなかったと表示されます-lfl
。そして、私がこのようにすると:
エラーに戻りundefined reference
ます。
申し訳ありませんが、私はこれについて少し無知です。
編集:フレックスがインストールされています。-lfl から C:/GnuWin32/lib/libfl.a に変更しようとしました (Linux には奇妙な問題があり、まだ Mac を持っていないため、Windows を使用しようとしています)。同じエラー。
compiler-errors - `yyerror'の複数の定義
Bison(またはyacc)を使用して、エラーを解決するにはどうすればよいですか?
%option noyywrap nodefault yylineno
一番上に試作品を書いてみました。運がない。
-編集-
気にしない。使用する例をコピーして貼り付けたとき、すでにyyerror関数があることに気づいていませんでした。
c - 文字列のC配列を宣言する方法
私はクラス用の単純なlexプログラムに取り組んでおり、その中で非常に基本的なシンボルテーブルを作成しています。これは、検索用の線形スキャンを使用した文字列の配列です。私はそれを次のように宣言しました:
そして、私はそれを次のように使用しています:
ただし、strcmp呼び出しで一貫してセグメンテーション違反が発生します。私は非常に単純なものを台無しにしたと確信しています。