問題タブ [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.

0 投票する
12 に答える
4956 参照

parsing - 解析、それについてどこで学べますか

私は、ある言語を別の言語に「翻訳」する仕事を与えられました。ソースは、正規表現を使用した単純な行ごとのアプローチには柔軟性が高すぎる (複雑)。字句解析とパーサーについて詳しく知るには、どこに行けばよいですか?

0 投票する
8 に答える
38153 参照

python - Python での字句解析、トークン化、解析のリソース

Python を使用した字句解析、解析、およびトークン化に関するリソースを教えてもらえますか?

私はオープン ソース プロジェクト ( hotwire ) で少しハッキングを行っており、入力されたコマンドをlexes解析、およびトークン化するコードにいくつかの変更を加えたいと考えていました。これは実際に動作するコードであるため、かなり複雑で、解決するのが少し困難です。

これまでに lex/parse/tokenise のコードに取り組んだことがないので、この側面に関するチュートリアルを 1 つまたは 2 つ実行するのが 1 つのアプローチになると考えていました。実際に変更したいコードをナビゲートするのに十分なことを学びたいと思っています。そこに適したものはありますか?(理想的には、最初にドラゴンの本を購入して読むことなく、午後に行うことができます...)

編集: (2008 年 10 月 7 日) 以下の回答のどれも、私が望むものをまったく与えてくれません。それらを使用して、パーサーをゼロから生成できましたが、lex や yacc などのツールを使用せずに、独自の基本的なパーサーをゼロから作成する方法を学びたいと考えています。そうすることで、既存のコードをよりよく理解できるようになります。

それで、誰かがPythonだけを使って基本的なパーサーをゼロから構築できるチュートリアルを教えてもらえますか?

0 投票する
8 に答える
1475 参照

python - Perl または Python での lex のような機能のエミュレーション

これが取引です。複数の正規表現に基づいて行で文字列をトークン化する方法はありますか?

一例:

すべての href タグ、対応するテキスト、および別の正規表現に基づくその他のテキストを取得する必要があります。したがって、3 つの式があり、行をトークン化し、すべての式に一致するテキストのトークンを抽出したいと考えています。

私は実際に、古き良き lex の実装である flex (Adobe と混同しないでください) を使用してこれを行いました。lex は、式に基づいて「アクション」を実行することにより、これを行うエレガントな方法を提供します。lex がファイルを読み取る方法も制御できます (ブロック/行ベースの読み取り)。

問題は、flex が実際にトークン化ジョブを実行する C/C++ コードを実際に生成することです。これらすべてをラップするmakeファイルがあります。perl /python が何らかの方法で同じことをできるかどうか疑問に思っていました。好きなことをすべて単一のプログラミング言語で行いたいというだけです。

トークン化は、アプリケーションの一部としてやりたいことの 1 つにすぎません。

perl または python とは別に、どの言語 (関数型も) でこれを行うことができますか?

ここでPLYとANTLRについて読みました(解析、どこで学べますか)。

しかし、Python自体で自然に行う方法はありますか? 無知で申し訳ありませんが、これらのツールは一般的な製品やサービスで使用されていますか?

ありがとうございました。

0 投票する
7 に答える
4129 参照

parsing - 動的 (?) パーサー

実行時に AST/parse ツリーを生成するパーサーはありますか? EBNF文法の文字列または類似のものを受け入れてデータ構造を吐き出すライブラリのようなものですか?

  • 私はantlr、jlex、およびそれらの同類を認識しています。彼らはこれを行うことができるソース コードを生成します。(コンパイルステップをスキップしたい)
  • 私はBoost::Spiritを知っています.C++構文でいくつかの黒魔術を使用して、実行時にそのようなものを生成します(間違いなく私が望むものにはるかに近いですが、C++に関しては私は困っています.そして、それはまだいくらかです.文法がハードコードされているため、制限されます)
  • PythonやRubyについては何も知りませんが、コンパイラコンパイラはそのような言語で非常に効果的かもしれません...

今、私はパーサーコンビネーターを認識しています。(ありがとう、ジョナス) そしていくつかのライブラリ (ありがとう、エリベン)

ついでに、 Parsing Expression Grammarsにも最近気付きました。誰かがそれを実装するとクールに聞こえます (彼らは Perl 6 にはそれがあると言っていますが、Perl は私の理解を回避しています)。

0 投票する
2 に答える
2454 参照

parsing - flex/lex で単語境界状態を実装する (パーサージェネレーター)

パターン マッチが単語の文字の後に発生するか、単語以外の文字の後に発生するかについて述語できるようにしたいと考えています。つまり、flex/lex がサポートしていないパターンの先頭にある \b word break regex char をシミュレートしたいのです。

以下は私の試みです(これは希望どおりに機能しません):

入力:

期待される出力

実際の出力:

私がこれを行っているのは、ダイアレクタイザーのようなことをしたいからであり、実際のレクサーの使用方法を常に学びたいと思っていました置き換えたいパターンは単語の断片である必要がある場合もあれば、単語全体のみである必要がある場合もあります。

0 投票する
14 に答える
67582 参照

c++ - C/C++ パーサー/アナライザーを作成するための優れたツール

C/C++ コードの解析と解析をすばやく開始するための優れたツールは何ですか?

特に、C/C++ プリプロセッサと言語を処理するオープン ソース ツールを探しています。できれば、これらのツールは文法に lex/yacc (または flex/bison) を使用し、複雑すぎないようにする必要があります。最新の ANSI C/C++ 定義を処理する必要があります。

ここに私がこれまでに見つけたものがありますが、それらを詳細に見ていません (考え?):

  • CScope - 古い学校の C アナライザー. ただし、完全な解析は行わないようです。C 関数を見つけるための美化された「grep」として説明されています。
  • GCC - みんなのお気に入りのオープン ソース コンパイラ。非常に複雑ですが、すべてを実行しているようです。GEMと呼ばれる GCC 拡張機能を作成するための関連プロジェクトがありますが、GCC 4.1 (2006) 以降更新されていません。
  • PUMA - ピュア マニピュレーター。(ページから: 「このプロジェクトの目的は、C/C++ ソースの分析と操作のためのクラスのライブラリを提供することです。この目的のために、PUMA はスキャン、解析、そしてもちろん C/C++ ソースの操作のためのクラスを提供します。」) . これは有望に見えますが、2001 年以降更新されていません。明らかに PUMA はAspectC++に組み込まれていますが、このプロジェクトでさえ 2006 年以降更新されていません。
  • さまざまな C/C++ 生の文法。c-c++-grammars-1.2.tar.gzを入手できますが、これは 1997 年以降維持されていません。少し Google で検索すると、出発点として役立つ他の基本的な lex/yacc 文法が引き出されます。
  • 他のもの?

これを、C/C++ ソースを新しい玩具言語に翻訳するための出発点として使用したいと考えています。

ありがとう!-マット

(2/9 追加): 明確化: C/C++ コード自体に加えて、プリプロセッサからセマンティック情報を抽出したいと考えています。「#define foo 42」が整数「42」に消えないようにしたいのですが、「foo」という名前に付けたままにしておきます。残念ながら、これにより、最初にプリプロセッサを実行し、C/C++ 解析ツリーのみを提供するいくつかのソリューションが除外されます)。

0 投票する
5 に答える
52382 参照

parsing - Flex/LexとYacc/Bisonの違いは何ですか?

Flex&LexとYacc&Bisonの違いは何ですか。私はインターネットを乱暴に検索しましたが、確かな答えは見つかりませんでした。

Ubuntuに純粋なLexとYaccをインストールできますか、それともflexとbisonのみをインストールできますか。私は混乱しています。

  • LexまたはYaccはまだ誰かによって維持されていますか?
  • それらはすべて無料ですか?
  • Lexが無料でない場合、なぜUbuntuディストリビューションにインストールするのですか?

    /li>
0 投票する
2 に答える
637 参照

dictionary - lex/yacc での辞書データ構造の使用

lex/yacc を使用して作成しているマイクロプロセッサ用のアセンブラを書いています。

アセンブラ コードにラベルを実装したいと考えています。そのための良い方法は、{name:line#} の形式でラベルの辞書を作成することです。次に、ラベルを挿入するときに、ラベルが既に定義されている場合はエラーであることを確認できます。

では、lex/yacc で辞書構造を使用するにはどうすればよいでしょうか?

0 投票する
1 に答える
333 参照

lex - lex でのコマンド フォール スルー

プログラムで lex を使用していますが、助けが必要な問題に遭遇しました。

私のプログラムは、[something " something] の形式で入力を受け入れます。これは正しく機能しています。

ただし、[something"something] という形式も受け入れる必要があります。

すべての入力が (前処理のように) 実行される lex である種の最初のケースを作成し、その後、プログラムの残りの部分で同じ変更された入力を続行する方法はありますか?

これが私が話していることのようなものです:

0 投票する
2 に答える
1700 参照

c - unput間違った使用

flexへの入力であるtest.lを作成しました。これは、main関数で終了します。

main関数が次のように実装されている場合:

問題はありません。

パーサーをだまして、最初の文字が常にセミコロンであると信じ込ませたいので、mainを次のように実装しました。

上記はセグメンテーション違反につながります。

unputを使用すると、セグメンテーション違反が発生するのはなぜですか?