レンダリングエンジンを使って簡単なマークアップ言語を書きたいです。
まず、完全にはわかりませんwhenこれを試してみるべきです...私は12歳です...しかし私はWebや本を通じて学んだC++の有能者。
私はJavaScript、PHP、HTMLも得意です。現在RubyとHaskellの変更について学んでいます。
私はすべての低レベルと高レベルの概念を理解しています。しかし、私をいつも混乱させていた唯一のことは、マークアップ言語やプログラミング言語などを理解し、コンパイルまたは解釈するために、人々がこれらのパーサーをどのように設計するかということです。
私の質問は、さらに単純なマークアップ言語用の単純なレンダリングエンジンをいつ書き始めるべきかということです。
フレームワークがインターフェイスに使用するカスタムxmlのようなカスタム言語に似ています(QtはXMLに似た.uiファイルを使用してフォームを定義します)。
私はそのようなものをデザインするつもりですか?読むのに良い論文、記事、本はありますか?
優先言語:C++、JavaScript、Haskell、Ruby
あなたの特定の状況については、時間があれば、パーサーを作成してみます。 XMLベースのパーサーから始めることをお勧めします。これらは最も単純だからです(構文ツリーはすでにXMLファイルにきちんと書かれているため)。
パーサーを書くことがいつ有効であるかというより一般的な質問については、次のことが当てはまるはずだと私は主張します。
これは少し意見に基づいて複雑に見えるかもしれませんが、私の推論は本質的にパーサーがうまく書くのに非常に長い時間がかかるということです。パーサーがその負債を完済するために(それを書くのにかかる時間の観点から)、パーサーの代わりに、潜在的な各入力を処理する多くのコードを書くことになる問題ドメインを処理している必要があります。パーサー。それでは、HTMLおよびHTMLパーサーの例を使用して、上記の信念を実行してみましょう。
個人的なanecdataの一部として、私の会社はXMLを取得し、そのXMLを使用してSQLストアドプロシージャとの間でデータを読み書きするスプレッドシートへの書き込みを行うクライアント用のパーサーを作成しました。クライアントは次のようなことを理解できます。
<Workbook name="SomeWorkbook">
<Sheet name="SomeWorksheet">
<DataCell range="A1" name="employee" input="SPGetEmployees" />
<DataCell range="A2" name="salary" input="SPGetEmployees" />
<DataCell range="B3" name="total" input="SPGetEmployees" />
<DataCell range="B4" name"isApproved" output="SPApproveWorksheet" />
</Sheet>
<DataSources>
<DataSource direction="input" type="SP" database="someDatabase" name="SPGetEmployees">
<Parameters>
<Parameter name="financialYear" type="DateTime" isDataCell="false" />
</Parameters>
</DataSource>
<DataSource direction="output" type="SP" database="someDatabase" name="SPApproveWorksheet">
<Parameters>
<Parameter name="isApproved" type="Bit" isDataCell="true" />
</Parameters>
</DataSource>
</DataSources>
</Workbook>
それはすべて彼らの職務(半技術システム管理者)ではなじみがあるように見えますが、クライアントは、そうでなければこのワークブックを生成するC#コードを確実に理解しません。ワークシートのデータソースも頻繁に変更され、多くのC#コードを変更するよりも、一部のXMLを変更する方が迅速です。問題のドメインもよく理解されています。これは、一部のよく理解されたデータソースから一部のよく理解された出力(Excelファイル)を読み書きしているだけなので、クライアントのすべてのニーズに対応するXMLベースの言語を書くことができるためです。頻繁に変更する必要はありません。
パーサーなどの最適化のトピックに関するxkcdからのこの最後の注意を残しておきます: http://xkcd.com/1205/