問題タブ [lexical]

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 投票する
1 に答える
911 参照

parsing - スクリプト言語の字句解析

リソース API 用の簡単なスクリプトを作成しようとしています。リソース API は、主に構造化された方法でゲーム リソースを作成します。私が望むのは、リソースが必要になるたびに C++ プログラムを作成することなく、この API を処理することです。そこで、私たち (私と大学の講師) は、リソース ファイルを毎回コンパイルせずに作成/編集するための簡単なスクリプトを作成することにしました。GUI プログラムではなくコマンド ライン インターフェイスが必要であるという無関係な要素が他にもいくつかあります。

とにかく、ここにスクリプトのサンプルがあります:

このスクリプト言語を設計したのは私ではなく、API の所有者です。「.」より前の部分 ご想像のとおり、「。」の後のパスと部分です。は実際のコマンドといくつかのオプション、フラグなどです。最初のステップとして、字句解析器とパーサーに関する情報を検索するときに使用できると思ったので、左側の部分の文法を作成してみました。問題は、言語の解析とプログラミングに関しては経験が浅く、それが正しいかどうかわからないことです。左辺の例と文法を次に示します。

この文法が混乱する可能性がある場合の表記は、わかりません。5 つの異なる可能性があります。

「/」記号で始まる必要があり、それが唯一の記号である場合は、それをルートとして受け入れます。

今私の問題は、このスクリプトを字句解析するにはどうすればよいですか? 特別な方法はありますか?私の語彙アナライザーは何をすべきか、何をすべきでないか (いくつかの語彙アナライザーは、ある程度まで構文解析も行っていると読んでいます)。文法などは技術的に適切だと思いますか? どのような解析方法を使用すればよいですか (再帰降下、LL など)? 私はそれを技術的に適切な作品にしようとしています。営利目的ではないので時間があり、字句解析と構文解析をよりよく学ぶことができます。パーサー ライブラリを使用したくありません。

0 投票する
6 に答える
60366 参照

java - 語彙アナライザーの作成

私は現在字句解析プログラムを使用しており、Java を使用しています。私はこの問題の答えを探していましたが、今まで見つけられませんでした。これが私の問題です:

入力:

望ましい出力:

私はまだ初心者なので、皆さんが私を助けてくれることを願っています。ありがとう。

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

c - スキャナーの構築。トークンの識別

Scanner の作成の一環として、トークン化を実行する必要があります。

整数と実数を 2 種類のトークンとしてスキャンしたいと考えています。たとえば、トークン 1.0 があるとします。

整数または実数として分類するにはどうすればよいですか。

0 投票する
3 に答える
1508 参照

c - C字句解析器。スイッチを使用して小数/非小数を分析およびカウントする

私の字句解析器は、数字 (5,555,543667)、小数 (44.65,4.1)、およびピリオド (.) を認識します。

数字、小数、ピリオドは問題なく数えることができますが、数字とピリオドが隣り合っていると、小数としてカウントされます。

555 2.3 55.23 44 5 を含むテキスト ファイルを考えてみましょう。

私の出力は

1型1:555
2型3:2.3
3型3:55.23
4型1:44
5型3:5。

タイプ 3 は、10 進数の識別子です。

5 番目と 6 番目のトークンを数字として、次にピリオドとしてカウントしたいと思います。

これが私のswitchステートメントの処理方法です。

複数のことを試しましたが、公式には立ち往生しています。

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

parsing - JavaCC でのレキシカル ステートのプッシュ/ポップ

ほとんど 1 つの語彙状態のみを使用して記述された JavaCC DSL パーサーをリファクタリングしようとしています。

私の目標は、古い DSL を使用して古い構成を無効にしないように、コンテキストに依存する新しいキーワードを導入することです。

アイデアは、字句状態を変更し、新しいキーワードを導入して、非常に特定のコンテキストでのみ有効になるようにすることでした。以前のリリースとの下位互換性を確保します。

問題: コメントの語彙状態が既に変更されており、コメントの終了後に DEFAULT に戻ります。DEFAULT に戻すことは「ハードコーディング」されていますが、代わりに最後のアクティブな字句状態に戻すにはコメントが必要です。

私が理解していることから、状態をスタックに保持し、それらをプッシュおよびポップすると、これを達成するのに役立ちます(これはDPDAと呼ばれると思います)。これはJavaCCで可能ですか?

[編集、さらに検索した後、これが私が得た人です:]

私がやりたいことをやっているようですが、それは正しいですか?(ここで先読みを考えます)

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

flex-lexer - Flex は、デフォルト ルールの一致時に改行を stdout に出力します - その動作を変更したい

次のフレックスルールを設定しています。

私の目的にはうまく機能し、最初のルールに一致すると出力されます。

私を悩ませているのは、flex が 2 番目のルールに一致するたびに改行も出力していることです。そのため、改行で満たされた stdout を取得します。Cには何もしないOPがありますか? 空のルール アクションで改行を出力するように暗黙的に flex に指示していますか? 「{}」を省略しても同じ動作になります。sed などを使用して改行を除外できますが、改行の出力を停止するように flex に指示するだけです。

フォローアップの例とデータを提供させていただきます。

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

pascal - 字句エラー、ケース 2 つの連続したシンボルは字句エラーとしてカウントされますか?

インターネットで Pascal プログラミング言語の字句エラーを調べましたが、字句エラーなのかセマンティックなのかわかりません。

2 つの記号 (演算子) が互いの後に続くケースは、字句エラーまたは意味エラーとしてカウントされますか?

例:"+-", "<>", ";;"またはそのようなもの。

前もって感謝します。

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

context-free-grammar - 文脈自由文法における符号付き数と操作の区別

私は語彙スキャナーを書いている最中で、操作 (例: -) と符号付き数値 (例: ) をどのように区別するのか疑問に思っています-14。たとえば、次の行はどちらも有効です。

現在、私の字句スキャナーは次のように解析します。

+12
12 +12

ただし、プログラムの後半で 2 番目のステートメントの有効性をチェックするときに、無効としてフラグが立てられます。1 つの数値トークンの後に、隣接する演算子がなければ別のトークンを続けることはできません。私はそれらを次のようにスキャンしたいと思います:

+12
12 + 12

前の文字が演算子であるかどうかをチェックし、そうであれば符号付き数字トークンを生成し、そうでない場合は演算子の後に数字を生成するだけでこれを実装できますが、そうすると文脈自由文法の規則に反し、複雑さが大幅に増加します。私のスキャナーの。

数値トークンの一部であるかどうかを正しく判断する明確な方法で署名付きの数値をスキャンするにはどうすればよいですか?