3

Flex を使用して独自の言語を構築していますが、いくつか知りたいことがあります。

  • 字句解析器を使用する必要があるのはなぜですか?
  • 彼らは何か私を助けるつもりですか?
  • それらは義務ですか?
4

3 に答える 3

5

字句解析は、語彙素を具体的な文字シーケンスではなく抽象的なエンティティとして扱うことができるため、構文解析を簡素化するのに役立ちます。

ただし、言語を構築するにはフレックス以上のものが必要になります。字句解析は最初のステップにすぎません。

于 2009-11-30T14:27:07.480 に答える
3

入力文字列をスペースで区切られた文字列や数値に変換するときはいつでも、字句解析を実行しています。カスケード式の一連のelse if (strcmp (..)==0) ...ステートメントを記述することは、字句解析としてカウントされます。sscanf や strtok などの厄介なツールでさえ、字句解析ツールです。

いくつかの理由のいずれかにより、上記のいずれかの代わりに flex のようなツールを使用する必要があります。

  • エラー処理を大幅に改善できます。
  • flex で認識できるさまざまなことについて、より柔軟に対応できます。たとえば、C 形式の 16 進数値を scanf ルーチンで適切に解析するのは困難です。scanf は、16 進値が来ていることをほとんど知る必要があります。レックスはあなたのためにそれを理解することができます.
  • Lex スキャナーは高速です。多くのファイルや大きなファイルを解析している場合、これは重要になる可能性があります。
于 2009-11-30T14:57:39.323 に答える
1

BNF(またはEBNF)を使用して言語(文法)を宣言的に記述し、パーサーを使用して言語で記述されたプログラムを解析し、メモリ内の構造に取得してから自由に操作してください。

必須ではなく、もちろん自分で書くこともできますが、それは言語がどれほど複雑で、車輪を再発明するのにどれだけの時間が必要かによって異なります。

また、字句解析器自体を変更せずに言語 (BNF) を使用して言語を記述することができるという事実により、多くの実験を行い、言語の文法を変更して、それが正確に機能するようになるまで続けることができます。

于 2009-11-30T14:30:12.520 に答える