2

プログラミング言語のすべての標準仕様で、字句解析/レイアウトをプラグインして機能する準備ができている文法に直接翻訳できないのはなぜですか?

Flex / Bison、Lex / Yacc、Antlrなどに適応させることは不可能であり、さらに人間が理解できるようにすることは不可能だと理解できます。

しかし、確かに、それが標準仕様である場合は、文法レイアウトを単純にコピー/貼り付けする必要があります。代わりに、結果として大量のシフト/削減エラーが発生し、逆効果になり、不正確な文法が生成される可能性があります。

言い換えれば、なぜ文法/パーサーツールですぐに使用できるように読めなかったのでしょうか。

多分それは私が知らない議論の余地のあることです...

ありがとう、よろしく、トム。

4

3 に答える 3

1

言い換えれば、なぜ文法/パーサーツールですぐに使用できるように読めなかったのでしょうか。

標準ドキュメントは、パーサジェネレータではなく、人間が読み取れるようにすることを目的としています。

于 2010-02-18T15:19:09.660 に答える
1

人間が文法を見て、作者が何を意図していたかを知るのは簡単ですが、コンピュータは途中でもっと多くの手を握る必要があります。

具体的には、これらの仕様は通常、LL(1)またはLR(1)ではありません。そのため、先読みが必要であり、競合を解決する必要があります。確かに、これは言語仕様で行うことができますが、それは字句解析プログラムのソースコードであり、言語仕様ではありません。

于 2010-02-18T15:20:49.580 に答える
0

私はあなたの感情に同意しますが、標準を書いている人はこれに勝つことはできません。

レクサー/文法をパーサージェネレーターで直接標準外で機能させるには、標準のライターは特定のものを選択する必要があります。(1958年にCOBOL標準の人々はどのような選択をしましたか?)

人気のあるもの(LEX、YACCなど)は、簡潔さと明確さのために書かれた参照文法を処理できないことが多いため、選択が不十分です(たとえば、非)。

よりエキゾチックなもの(Earley、GLR)は、無限の先読みとあいまいさを許容するため、より効果的かもしれませんが、見つけるのは困難です。したがって、このような特定のツールを選択した場合、必要なものが得られませんこれは、使用しているパーサジェネレーターで機能する文法です。

そうは言っても、DMS SoftwareReengineeringToolkitはGLRパーサージェネレーターを使用します。参照文法を機能させるために多くのことをマッサージする必要はありません。DMSは現在、C ++などの有名な難しい言語を含む、多くの言語を処理します。私見、これはあなたが得る可能性が高いのと同じくらいあなたの理想に近いです。

于 2010-02-18T15:32:03.037 に答える