問題タブ [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.
parsing - Flex を使用して 2 パス スキャナーを実装するにはどうすればよいですか?
ペット プロジェクトとして、Web スクリプト言語として使用できる、独自の設計による基本的な言語の実装を試みたいと考えています。C++ プログラムを Apache CGI として実行するのは簡単なので、実際の作業は、非コード (HTML/CSS マークアップ) とサーバー側コードを含む入力ファイルを解析する方法にあります。
学部生のコンパイラ コースでは、FlexとBisonを使用して、単純な言語のスキャナーとパーサーを生成しました。私たちは文法のコピーを受け取り、単純な言語を仮想マシン用の単純なアセンブリに変換するパーサーを作成しました。flex スキャナーは入力をトークン化し、トークンを Bison パーサーに渡します。
それと私がやりたいことの違いは、PHP のように、この言語にはプレーンな HTML マークアップと、次のように散在するスクリプト言語を含めることができるということです。
次のように入力ファイルを解析するのが効率的であると仮定するのは間違っていますか?
- スクリプト開始タグが見つかるまで入力をスキャンします ('
- 2 番目のスキャナーは、入力ファイルのサーバー側スクリプト セクションを (開始タグ: '' から) トークン化し、そのトークンをパーサーに渡します。パーサーは、ファイル内のマークアップについて知る必要はありません。
- 制御は、この一般的なパターンを継続する最初のスキャナーに戻されます。
基本的に、最初のスキャナーは、マークアップ (変更されずにブラウザーに直接返される) と、2 番目のスキャナーに渡されるコードのみを区別します。2 番目のスキャナーは、コードをトークン化し、トークンをパーサーに渡します。
これが堅実な設計パターンでない場合、PHP などの言語はどのようにして入力のスキャンとコードの解析を効率的に処理するのでしょうか?
regex - flex (語彙アナライザー) 正規表現 - 定義の再利用
私はこの作業定義を持っています:
[a-zA-Z] と [0-9] を繰り返したくないので、2 つの新しい定義を作成しました。
DIGIT および VALID 定義を使用するように IDENTIFIER ルールを書き直すにはどうすればよいですか?
「2番目」の一致を行う方法がわかりません。ここで立ち往生しています:
ありがとう。
編集:私が使用しているテスト プログラム全体: http://pastebin.com/f5b64183f。
c++ - bison で生成されたパーサーのパーサー状態をクリアする
Flex で生成された C lexer と、Bison で生成された C++ パーサーを使用しています。文字列入力のみを受け入れるようにパーサーを変更しました。
ループ内でパーサー関数yyparse()
を呼び出し、ユーザー入力を 1 行ずつ読み取っています。入力が「終了」の場合、ループを停止します。
私が直面している問題は、入力がどのルールにも一致しない場合、パーサーが突然停止し、次の反復で同じ状態で開始され、(構文エラーのために) 停止されたルールが完了することを期待していることです。
入力が有効で、パーサー ルールと一致する場合は正常に機能します。
構文エラーでyyerror()
、単純なエラー メッセージを表示する関数を再定義しました。
入力がどのパーサー ルールとも一致しない場合にパーサーの状態をクリアして、次の反復でパーサーが新たに開始されるようにするにはどうすればよいですか?
c - Visual Studio 2005/2008でflexをどのようにコンパイルしますか?
私はこれを理解することはできません。gnuwin32からflex2.5.4aのwin32バイナリをダウンロードできますが、Visual Studio 2005を使用して最新バージョン(2.5.35)をビルドしたいと思います。cygwinに組み込むことができると思いますが、その面白さはどこにありますか。 ?
parsing - 簡単なパーサーの開発
私の日常の仕事には、Pascal ライクなコンパイラの開発作業が含まれます。私はずっと最適化とコード生成に取り組んできました。
また、同じ言語用の単純なパーサーを作成する方法を学びたいと思っています。ただし、これについてどうすればよいかよくわかりません。Flex と Bison が選択されているようです。しかし、C++ や C# を使用してパーサーを作成することはできませんか? 私はCに少し不気味です。
Yacc++ は C# をサポートしていますが、ライセンスが必要です。この点に関して、私が見つけることができるすべての助けを探しています。提案をいただければ幸いです。
c++ - C++: 大整数
私はコンパイラ プロジェクトの一部としてレクサーを作成しています。エラーを出力できるように、整数が int に収まるサイズよりも大きいかどうかを検出する必要があります。この目的に適合する大整数用の C++ 標準ライブラリはありますか?
regex - FLEX:一度に複数のトークンを返す方法はありますか
flexでは、正規表現の1つの一致に対して複数のトークンを返したいと思います。これを行う方法はありますか?
parsing - 組み込みシステムで Lex トークナイザーを使用する
非標準の C 環境で使用する構成ファイル パーサーを作成しようとしています。特に、 が提供するユーティリティに頼ることはできません<stdio.h>
。
<stdio.h>
Flex を使用しようとしていますが、の FILE ポインターではなく、独自の入力構造を使用する必要があります。
parsing - Flex/LexとYacc/Bisonの違いは何ですか?
Flex&LexとYacc&Bisonの違いは何ですか。私はインターネットを乱暴に検索しましたが、確かな答えは見つかりませんでした。
Ubuntuに純粋なLexとYaccをインストールできますか、それともflexとbisonのみをインストールできますか。私は混乱しています。
- LexまたはYaccはまだ誰かによって維持されていますか?
- それらはすべて無料ですか?
Lexが無料でない場合、なぜUbuntuディストリビューションにインストールするのですか?
/li>
ant - Hudson で Flex プロジェクトを設定するためのリソース
フレックス プロジェクト用の CI 環境のセットアップを検討しています。このような環境をセットアップした経験はほとんどありませんが、それについて多くのことを読み、私たちのプロジェクトでこれから多くの利益を得ることができると考えています. 私は ANT の経験があり、現在、建物に使用しています。私はしばらく Hudson を検討してきましたが、適切な CI 環境をサポートする力を持ちながら、非常に素晴らしくシンプルに見えます。
基本的に、私の質問は、Hudson で Flex プロジェクトをセットアップした経験のある人はいますか? もしそうなら、ハドソンを立ち上げて実行するためにプロジェクトごとにどのような労力が必要か、問題、コスト/メリットに関する情報を共有してください. 私はしばらくの間グーグルで検索しましたが、誇らしげに言えば、Fast 字句解析器とハドソン川の両方について詳しく知っていますが、この投稿のトピックについてはほとんど詳しくありません =)