私はある言語を別の言語に「翻訳」する仕事をしています。ソースは正規表現で簡単な行単位のアプローチでは柔軟性がありません(複雑な)。語彙分析とパーサーの詳細についてはどこで調べることができますか?構文解析、どこでそれについて学ぶことができます
答えて
私は最近、Pythonでlexとyaccの実装であるPLYを使っています。それを始めるのは非常に簡単で、ドキュメントにはいくつかの簡単な例があります。
解析はすばやく技術的なトピックになり、PLYのようなパーサービルダを使用している場合は、解析アルゴリズムの詳細をすべて知る必要はないことがわかります。
は、Javaベースのツールを好む場合は、Javaコンパイラコンパイラ、JavaCCのは、素敵なパーサ/スキャナです。これは設定ファイル駆動型で、プログラムに含めることができるJavaコードを生成します。私はそれを数年使っていないので、現在のバージョンがどういうものなのか分かりません。もっと詳しく知ることができます:https://javacc.dev.java.net/
「感情的」を取得したい場合は、「The Dragon Book」のコピーを手に入れてください。 通常はコンパイラデザインコースのテキストです。それは間違いなくあなたの必要性を満たすでしょう "字句解析とパーサーの詳細を学ぶだけでなく、他の束楽しいもの!
IMH(umble)O、自分自身で腕や脚を守り、古い版を購入すると、情報の欲求が満たされます。
flexとbisonは新しいlexとyaccです。 BNFのシンタックスは、少し鈍いためにしばしば非難されます。この理由からANTLRとRagelに移った人もいます。
多くの翻訳をしていない場合は、PerlやRubyで複数行の正規表現を使用して1回だけ取り除くことができます。既存の言語に対して互換性のあるBNF文法を書くことは、軽く取られるべき課題ではない。
一方、与えられた言語の.lと.yファイルがオープンソースとして利用可能な場合は、それを完全に利用することができます。次に、既存の解析ツリーから新しいコードを構築することができます。
字句/構文解析+です。TypeCheck +コードの生成は、私は強固な基盤を望む誰にもそれをお勧めします素晴らしいCSの運動ですので、私はドラゴンブック
ニクラウス・ヴィルトの著書「コンパイラの建設」(利用可能なため、すべてのよ無料PDFとして) http://www.google.com/search?q=wirth+compiler+construction
さらに別の教科書はProgramming Language Pragmaticsです。私はドラゴンの本よりも好きですが、YMMVです。
あなたがPerlを使用している場合は、考慮する別のツールはParse::RecDescentです。
この翻訳を一度行うだけで、コンパイラ技術について知らなければ、かなり簡単な翻訳をできるだけ手に入れることをお勧めします。はい、それは多くの仕事です。しかし、複雑な課題を学び、1つのジョブに適したソリューションをコーディングするよりも、あまり効果がありません。しかし、あなたはまだその科目を学ぶべきですが、それがあなたの現在のプロジェクトを終えるための障害になっていることを知らないようにしてはいけません。
私はこのサイトが役に立ったと評価してい:
私はLEX/yaccのを使用される最初の時間が比較的単純なプロジェクトのためでした。このチュートリアルは私が本当に必要なものでした。後ほどもっと複雑なプロジェクトに近づいたとき、私はこのチュートリアルと簡単なプロジェクトから得た親しみが私に何か魅力的なものを作ってくれました。
私は(かなり)いくつかのコンパイラクラスを取った後、The Dragon BookとC&Tの両方を使用しました。私はC & Tは、コンパイラの構築を消化するのにはるかに優れていると思います。ドラゴンブックから何かを取り除くつもりはないが、C & Tははるかに実用的な本だと思う。
多くの人が本を推薦しています。多くの場合、これらは割り当てや締め切り日などを持つ構造化環境ではるかに役立ちます。そうでない場合でも、材料を別の方法で提示することは大きな助けになります。
(a)適切なCSカリキュラムを持った学校に行くと考えましたか?
(b)MIT's Open Coursewareのようなオンライン講義がたくさんあります。彼らのEE/CS sectionには、解析に触れるコースがたくさんありますが、それ自体は解析できません。それは典型的に、言語分類とオートマトンがCS理論の多くの中心にある最初の理論コースの1つとして導入されています。
Parsing Techniques - A Practical Guide Dick GruneとCeriel J.H. Jacobs
この本(PDFで自由に入手可能)は、さまざまな解析技術/アルゴリズムの広範な概要を示しています。あなたが本当に異なる解析アルゴリズムを理解したいのであれば、このIMOはドラゴンブックよりも優れたリファレンスです(解析テクニックは解析に集中しますが、ドラゴンブックはコンパイルのプロセスの一部ですが、 。
- 1. どこでAPLを学ぶことができますか?
- 2. Haskell - >構文解析エラー 'どこで'
- 3. JavaScriptを学ぶことを学ぶが、私はつまらない。
- 4. 始めにHTMLを学ぶ前に学ぶべきこと
- 5. PyBrainがバイナリを学ぶことができない理由
- 6. Grailsから何を学ぶことができますか?
- 7. どのようにApex言語を学ぶことができますか?
- 8. 解析エラー:構文エラー、予期しない「」ここで(T_STRING)
- 9. Javaでオブジェクトを構築することを学ぶ
- 10. どのようなソフトウェアがニューラルネットワークの最高の構造を学ぶことができますか?
- 11. どこでCSSを学ぶのに良い場所ですか?
- 12. クラウドコンピューティングで.NETの開発者として学ぶべきこと
- 13. 構文解析について混乱しています
- 14. どのように私はJqueryを学ぶことから始めることができます
- 15. Ruby on Railsを学ぶときは、単にRailsを学ぶだけでなく、それに関連する技術を学ぶだけでいいですか?
- 16. PHP解析/構文エラー。どうすればそれらを解決できますか?
- 17. 構文解析:nestedExprでdblQuotedStringの構文解析が異なります
- 18. "::"シンボルとはどこに私はそれについての詳細を得ることができますか?
- 19. VK APIの大学を構文解析してください
- 20. これは何のjava8構文ですか、どこでもっと読むことができますか?
- 21. CloudCodeを解析できないことがあります
- 22. AgularJS 'object'型の異なるオブジェクト 'object'を見つけることができません。構文解析クエリ
- 23. SQL構文にエラーがありますか?それを見つけることができません
- 24. OKhttpライブラリでデータを解析することができます
- 25. 短期間に大量のJavaコンセプトをどのようにして学ぶことができますか?
- 26. .ipa、ここで私はそれを見つけることができます
- 27. スウィフト - URLを含む文字列を解析し、この文字列を解析することができますどのように
- 28. Jsonの構文解析がIOSで間違っています
- 29. スレッドについて学ぶ
- 30. phplintで構文解析されていない "use"文
+1 mitのocwのために、私は数学のために常にそれを使用します。何らかの理由で、私のschedualでクラスに行くのは6:30に起きるよりはるかに良いです。 – Shawn