Lexical Analyzerを使用する理由
-
10-07-2019 - |
質問
Flexを使用して独自の言語を構築していますが、いくつかのことを知りたいです:
- レキシカルアナライザーを使用する理由
- 彼らは私を助けてくれますか?
- 義務ですか?
解決
字句解析は構文解析を簡素化するのに役立ちます。なぜなら、語彙素は具体的な文字シーケンスではなく抽象エンティティとして扱うことができるからです。
ただし、言語を構築するにはflex以上のものが必要になります。字句解析は最初のステップにすぎません。
他のヒント
入力文字列をスペースで区切られた文字列や数値に変換するときはいつでも、字句解析を実行しています。カスケードされた一連の else if(strcmp(..)== 0)...
ステートメントを記述すると、字句解析としてカウントされます。 sscanfやstrtokなどの厄介なツールでさえ、字句解析ツールです。
次のいずれかの理由により、上記のいずれかではなくflexのようなツールを使用する必要があります。
- エラー処理を大幅に改善できます。
- flexを使用すると、さまざまな認識を柔軟に行うことができます。たとえば、scanfルーチンを使用してC形式の16進数値を適切に解析するのは困難です。 scanfは、16進値が近づいていることを知っている必要があります。レックスはあなたのためにそれを理解することができます。
- Lexスキャナーは高速です。大量のファイルや大きなファイルを解析している場合、これが重要になる可能性があります。
BNF(またはEBNF)を使用して言語(文法)を宣言的に記述し、パーサーを使用して言語で記述されたプログラムを解析し、構造で取得できるため、レキシカルアナライザーの使用を検討します。メモリーしてから自由に操作します。
それは義務ではなく、もちろん独自に書くこともできますが、それは言語がどれほど複雑で、車輪を再発明するのにどれだけの時間を要するかに依存します。
また、語彙アナライザー自体を変更せずに言語(BNF)を使用して言語を記述することができるという事実により、多くの実験を行い、正確に機能するようになるまで言語の文法を変更することができます。
所属していません StackOverflow