問題タブ [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.
parsing - Flex と YACC で #include コンストラクトを実装するにはどうすればよいですか?
解析中にインクルード トークンに遭遇した場合、入力として指定されたファイルを開き、これの解析を開始するように YACC に指示したいと考えています。この解析が終了したら、YACC にファイルに戻り、インクルード式の直後に解析を続行するように指示したいと思います。インクルード深度レベルを 1 に制限します。
c - Lex:サブストリングとの一致を防ぐにはどうすればよいですか?
たとえば、「int」を「INT」に変換することになっています。でも、「integer」という言葉があれば、「INTeger」になるはずはないと思います。
ただし、サブストリングを定義する"int" printf("INT");
と一致します。これを防ぐ方法はありますか?
c - YACC、Lex、および C ファイル間でメモリを共有する
YACC (Bison) 文法、Lex (Flex) トークナイザー、およびstruct
(または実際には任意の変数) を共有する必要がある C プログラムがあります。現在、文法ファイルで実際のオブジェクトを宣言し、extern
それを必要な場所 (つまり、私の C ソース ファイル) で宣言します。通常はポインターを使用して操作します。C ファイルと文法ファイルの間に、データ構造の操作に役立つ関数を含む共有ヘッダー (および実装) ファイルがあります。これは機能しますが、少し不快に感じます。文法とプログラムの間でメモリを共有するより良い方法はありますか?
java - lex/yacc形式のJava文法を探しています
lex / yacc形式の文法のオンラインリポジトリを知っている人はいますか?迅速なソースコードコンバーターを作成するためのJava文法を探しています。
ありがとうございました!
編集:文法の書き換えをできるだけ少なくしてfslex / fsyaccを使用したいので、lex/yaccを探しているのが望ましいです。
c - 同じプログラムで使用するために、lex/yacc から異なる yyparse 関数を生成するにはどうすればよいですか?
lex/yacc から 2 つの別個の解析関数を生成したいと考えています。通常、yacc は関数 yyparse() を提供します。これは、何らかの構文解析を行う必要があるときに呼び出すことができますが、それぞれが異なるレクサーと文法に関連付けられたいくつかの異なる yyparse が必要です。man ページでは -p (プレフィックス) フラグが提案されているようですが、これはうまくいきませんでした。yylval が適切に再ラベル付けされていないことを示す gcc からのエラーを受け取りました (つまり、いくつかの異なるトークンが定義されていないと主張しています)。これらの個別の関数を生成するための一般的な手順を知っている人はいますか?
ありがとう
makefile - YaccとLexの包含の混乱
yyparseの呼び出しを含むMakefileを使用してプログラムを正しくコンパイルする方法を知りたいですか?
これが私がすることです:
私はすべての通常のファイルをコンパイルするMakefileを持っていますが、それらはy.tab.cまたはlex.yy.cへの接続を持っていません(私はそれらを持っているはずですか?)
私は自分のコードに加えてこれを行います:
これは私がプログラムを作ろうとすると何が起こるかです:
「make」と入力するだけで、多くの警告が表示されます。いくつかの例を以下に示します。
関数yywrap':
/src/parser.y:12: multiple definition of
yywrap'server.o:/src/parser.y:12:最初にここで定義されたutils.o:
関数yyparse':
/src/y.tab.c:1175: multiple definition of
yyparse'でserver.o:/src/y.tab.c:1175:最初にここで定義されたutils.o
さまざまなyy_***ファイルを参照するとさまざまなエラーが発生します。過去にyyparseを複数回呼び出して正常にコンパイルしましたが、今回は違うようです。どこかの包含問題のようにひどいようですが、それが何であるかはわかりません。すべてのヘッダーファイルにもifndef条件があります。
ご協力いただきありがとうございます!
c - Lex (字句解析器) における正規表現の大きな問題
次のようなコンテンツがあります。
そして、 titleの二重引用符ですべてをキャッチする必要があります。私の最初の試みはこれでした:
^(" "|\t)+"title"" "*=" "*"\"".+"\","
これは最初の例をキャッチしますが、他の 2 つをキャッチしません。もう一方には複数の行があり、それが問題です。\n
次のように、複数の行を許可するためにどこかに変更することについて考えました:
^(" "|\t)+"title"" "*=" "*"\""(.|\n)+"\","
しかし、これは役に立ちません。代わりに、すべてをキャッチします。
私よりも、「私が欲しいのは二重引用符の間です。別のものが見つかるまですべてをキャッチするとどうなりますか?このようにして、行数に関係なく、タイトルの最後にいるかどうかを知ることができました"
。これ:,
^(" "|\t)+"title"" "*=" "*"\""[^"\""]+","
しかし、これには別の問題があります... 上記の例にはありませんが、タイトル宣言"
の間に二重引用符 ( ) を入れることができます。例えば:
はい、常にバックスラッシュ ( \
) が前に付きます。
この正規表現を修正するための提案はありますか?
java - フレックスで文字列を区別する
のような演算子に従って分割されるいくつかの文字列をトークン化する必要があります= and !=
。!=
文字列に演算子が含まれるまで、正規表現を使用して成功しました。私の場合、文字列は2つの部分に分かれていましたが、これは予想通りですが、指定さ!
れた演算子の一部であってもマークは左側にあります。したがって、正規表現はそれに適していないと考えており、恩恵を受けたいと考えていlex
ます。lex についての知識と経験が十分にないため、自分の仕事に適しているかどうかわかりません。基本的に、演算子の右側を他のデータの実際の値に置き換えようとしています。それが私の場合に役立つと思いますか?
ありがとう。
ruby - ERB ファイルを解析するためのライブラリ
Rails ERB ファイルを Hpricot/Nokogiri タイプの方法で評価するのではなく、解析しようとしています。解析しようとしているファイルには、ERB (標準レール ビュー ファイル) を使用して生成された動的コンテンツが混在する HTML フラグメントが含まれています。Hpricot や Nokogiri と同じように、周囲のコンテンツを解析するだけでなく、処理するライブラリを探しています。 ERB シンボル、<%、<%= など、あたかも html/xml タグであるかのように。
理想的には、<%、<%= などの記号が独自のノード タイプとして含まれる DOM のような構造を取得します。
正規表現を使用して何かを一緒にハックできることは知っていますが、html コンテンツと erb コンテンツの両方が含まれる非常に大きなビュー コード ベースで実行する必要があるツールを開発しているため、もう少し信頼できるものを探していました。重要です。
たとえば、次のようなコンテンツです。
次のようなツリー構造を返します。
gcc - lex の出力をコンパイルできません
この単純な lex プログラムの出力をコンパイルしようとすると、次のようになります。
使用:
私は得る:
lex --version は、実際には 'flex 2.5.35' を使用していることを示していますが、ls -fla `which lex` はシンボリック リンクではありません。出力がコンパイルされない理由はありますか?