人間が読めるフレーズや単語(Python、VB.NETなど)で主に構成されているプログラミング言語に対して、開発環境のエラーフィードバックと自動補完を提供するために必要なチェック数が少なく、これは、C言語のコードとは対照的に、コード構造のシンボルや句読点に依存しています。言語エラーの検出と自動補完の複雑さは言語構文に依存しますか?
答えて
私は、経験豊富な/ dozens of language front endsを構築する責任があります。
句読点と句読点の言語は、解析と静的分析が同じように一般的に同じように難しいです。
いずれかの種類の言語を定義する人々は、複雑な構文と複雑な名前解決と型推論規則の両方を備えた洗練された言語(C++、Scala、Ruby)を何十年にもわたって(例えばCOBOLでは1958年) ;コンパイラのベンダーは、奇妙なことをサポートするか、顧客のロックを提供するために(例えば、MSの "マネージドC++"、DLLの宣言など)、わかりにくい構文を追加します。貧弱な定義の第三の問題があります。上位の言語では動作について正確なルールが設定されていますが、多くの言語では実際の実装との辛抱強な試練によって暗いコーナーケースが生成されるような曖昧な定義(PHPなど)があります。
C++が最も悪いです。 C++ 11委員会は大規模な最近のものを混乱させる。私たちは完全なC++パーサを持っていますが、C++ 98実装の上にあるC++ 11のフルネーム解決にも取り組んでいます。 (名前解決コードは約25万行のコードであり、十分ではありません!)
IBM COBOLは近いです。言語はちょうど巨大であり、あらゆる種類の面白い名前解決規則があります(「参照が明白であれば、修飾されていない名前は特定の名前を参照できます」という意味です)。
構文解析や名前/型の解析が終わったら、コントロールフロー、データフロー、ポイントツー分析、レンジアナライザ、コールグラフ構築などになります。初期段階。私たちは、これらのタスクをサポートする本当に良いライブラリを手に入れて、より少ないもので取り除きます。
これを背景分析として、人々が望むスマートな種類の「静的分析」を開始することができます。
もう1人のポスターは、構文エラーからの回復と(重点)「意味のあるエラーメッセージの生成を続ける」と指摘しました。私が言うことができるのは、「アーメン、兄弟」です。これは、部分的なプログラムがあるときに何がうまくいかないかについての議論については、https://stackoverflow.com/a/6657974/120163を参照してください。これは、本質的に、構文エラー修復が修正プログラムで推測されるときに得られるものです。
これは私が探していた答えです。私が言うことができることは、あなたがしていることに感謝しています。これは本当に難しいと思います。 –
よかったよ、ありがとう。私はこの特定のキャリア選択の後にある日があります: - } –
- 1. 言語検出
回避しやすい「より簡単」を定義する前に、「冗長」と「簡潔」を定義してください。 – jason
@Close Voters:この質問は、VBがC#より優れているかどうかではありません。 – GSerg
私の推測は、冗長ではないということです。むしろ、C#ではもっと多くのことが許されているため、パーサーはコード行を解釈する方法が増えています。 – GSerg