2010-11-27 6 views
7

C++を解析する問題はよく知られています。それは純粋に構文に基づいて解析することはできません、LALRとしてはできません(言葉が何であれ、私は言語理論家ではありません)、言語仕様は数百ページです。私の個人的なプロジェクトの代替言語を決定しています。Valaは、C++に比べて構文解析に賢明な言語ですか?

バラは良い言語のようです。 C++に比べて多くの改善点を提供していますが、解析するのも面倒ですか?コンパイラ、ソースアナライザ、およびその他のツール用のパーサーを構築するのに適した、きちんとした、合理的な長さの正式な文法、またはいくつかの論理的記述を持っていますか?

答えが何であっても、それはGenieの代替構文になりますか?

(私もDと他のポスト-C++非VMの言語についてはあまり激しくはいえ不思議。)

+2

機能は、プロジェクトに特定の言語を選択する正当な理由ですが、その言語の解析の難易度はどうですか? (あなたの個人的なプロジェクトが上記言語のコンパイラを書いている場合を除きます)。このノートでは、C++はJavaやC#のようなLR(1)文法ではなく、潜在的に無限の先読みを伴う可能性があります。 – birryree

+0

VanaはC++よりもsanerでなければなりません。私はJavaが本当にうまくいくことを知っています。私はJavaで書かれたJava Parserを使用し、EBNFの文法からコンパイラコンパイラによって直接生成しました。 – Lagerbaer

+0

Err ..少なくとも、どの言語もそのように考えることができる限り、構文に基づいて構文解析することができます(もちろん、識別子は技術的に文脈依存ですが、ほとんどの言語で共通です)。はい、文法はLALR(1)ではありませんが、もちろん解析可能です。一方、構文解析の難しさは本当に言語を選択する上での主要な基準ではないはずです。与えられた言語に対して人気があるため(言い換えればライブラリを手に入れるなど)、言いたいことがたくさんあります。 –

答えて

7

C++は、共通して解析するプログラミング言語で最も複雑な(最も複雑でない場合)の一つでありますつかいます。特に難しいのは、名前ルックアップルールとテンプレートインスタンス化ルールです。 C++は、LALR(1)パーサ(BisonとYaccによって生成されたパーサーなど)を使用して解析できませんが、究極的に解析可能です(結局のところ、C++の解析に問題のないパーサーを毎日使用しています)。 (実際、G ++の初期のバージョンはBisonの一般化されたLRパーサーフレームワークの上に構築されました実際にはありません、コメントを参照してください)。

一方、私は再帰的降下パーサー私はValaがC++よりも "改善点"をどのように見ているのか分かりません。言語は同じ目標を達成しようとしています。一方、Valaインターフェースで書かれたGTK +以外のものは、おそらくほとんど見つからないでしょう。あなたは他のすべてのものにCのインターフェイスを使用するつもりです。本当にそのような言語を使用する点を打ち負かします。

複雑であるためにC++を気に入らないのであれば、Objective-CをCの単純な拡張子(Valaのような)だからといって考えてみてください。プログラマーはMacの土地にあるすべてのものを基にしてそれを引き出すことができます。

最後に、言語自体を解析することの難しさが、言語を使用するためにプログラマが気にするべきものと関係している理由はわかりません。ちょうど私の2セント。

+0

+1で、平均的な開発者にとってパース可能性は懸念すべきではありません。 –

+0

私はg ++がBisonの一般化されたLRパーサーインフラストラクチャに基づいていることに疑いを持っています。2002年にバージョン1.5で追加されました。AFAIK、3.4より前のパーサーはLALRに基づいていました。 – AProgrammer

+0

@AProgrammer:わかりません。 C++は単にLALRを使って解析できません。どのようにしてその人をサポートすることができますか? –

6

かなり簡単です。 libval​​aを使用すると、独自の文章を書くのではなく、構文解析、意味解析、コード生成の両方を行うことができます。

関連する問題