3

私がプログラミングしたいと思った最初のことの1つは、マルチプレイヤーテキストゲームを作成することでした。少なくともその時点で、スマートパーサーを作成するのがいかに複雑であるかを理解したとき、私はその概念から離れて怖がっていました。

それで今、私はそれについて考えることに戻り、私はこの主題について多くの研究をしようとしました。それは私が思っているよりもはるかに複雑であるように思われ、字句解析、トークン化、構文解析などの用語に出くわしましたが、後者だけ以前に知っていました。字句解析の分野が私が探していたものだと思いました。

したがって、私が読んだ非常に困難でエラーが発生しやすい独自のレクサーとパーサーを作成しようとする代わりに、ほとんどの人が離れるように指示します。私にとってすべての重労働であり、私は自分が望む文法に集中することができます。また、そういうことをやろうとしている人は、単に使うべきだと言う人もたくさんいますInform

確かに、Informはかっこいいと思いますが、C#が私の選択言語であり、Informが提供するものを超えて自由に使えることが好きです。特定の最終結果よりも、マルチプレイヤーテキストゲームのすべてのコンポーネントとフレームワークを作成することに興味があるので、標準のプログラミング言語を使用するというアイデアが一番好きです。

私はしばらくの間、C#用の優れたレクサー/パーサジェネレーターを見つけようとしてきましたが、人々がコメントするという点で提供されているように見えるすべてに本当に満足しているわけではありません。

C#のantlrは未開発で、ほとんどが後付けのようです。私はGPLEXとGPPGを理解しようとしましたが、多くのドキュメントを読み、一般的な字句解析について多くを読み込もうとしているにもかかわらず、現時点ではあまりにも混乱しています。

字句解析のプロセス全体について頭の中にはたくさんの概念がありますが、字句解析器とパーサーに直面したとき、これらが実際のコードにどのようにメッシュ化されるのか本当にわかりません。

名詞句と動詞句を使った文法のような単純な英語を作成し、ゲームの開発と拡張時にデータベースから動的に追加して準備できる名詞と動詞のリストを作成できるようにしたいと考えています。

私がこのテーマでやろうとしてきた研究の結果が足りなくなったような気がします。

正直なところ、私が調査した内容に基づいてレクサーとパーサーの独自のろくでなしの概念を作成するというアイデアは、私が読んだどのレクサー/パーサージェネレーターを使用するよりも、現時点でははるかに魅力的です。

4

2 に答える 2

10

まず、いくつかのメタアドバイス。これは、特定の技術的な問題に関するものではないため、StackOverflow にとっては適切な質問ではないかもしれません。代わりに、Programmers.StackExchange.com でこのような質問をすることを検討してください。

あなたの質問に答えるには:トールセスに同意します。ここでどのスキルを向上させたいかによって異なります。私はかなり器用でセーリングが好きなので、なぜボートを作らないのかと時々聞かれます。未完成のボートをガレージに 2 年間保管したい場合にのみ、ボートを作成する必要があるからです。航海したいなら、航海してください。船を作りたければ船を作る。しかし、航海したいからといって船を造ってはいけません。テキスト アドベンチャーを書きたい場合は、Inform7 を学習してください。これは、世界がこれまでに見たテキスト アドベンチャーを作成するための最も信じられないほど素晴らしいツールです。レクサーとパーサーの作成方法を学びたい場合は、パーサー ジェネレーターをいじらないでください。lexer と parser を作成します。

パーサー ジェネレーターは、新しいプログラミング言語のプロトタイプを作成していて、すぐに使い始めたい場合に最適です。しかし、プログラミング言語の文法は、自然言語にはない方法でパーサーの自動生成に適した、非常に優れた特性を持つことができます。パーサー ジェネレーターのアプローチを使用する場合、文法の構築に費やすのと同じくらい多くの時間をパーサー ジェネレーターとの戦いに費やす可能性があります。

あなたはこれについて初心者なので、テキストの冒険の歴史を要約することをお勧めします。「北に行く」、「剣を手に入れる」、「レンガを落とす」などの 2 語コマンドを解析できるレクサーとパーサーを作成することから始めます。これにより十分な柔軟性が得られ、テキスト アドベンチャー デザインの他の問題 (オブジェクトと場所を表現する方法) の解決に取りかかることができます。小さく始めてください。プレイヤーがオブジェクトを拾ったり置いたりできる 2 つの部屋のゲームを作成できれば、順調に進んでいます。

つまり、本能に従うことを強くお勧めします。独自のレクサーとパーサーを作成するのは非常に楽しく、実際には、小さく始めて徐々に上達していけばそれほど難しくはありません。

于 2013-01-26T16:51:15.930 に答える
3

それはあなたがプロジェクトから何を得たいかによります。

これが暇なときに行う学習プロジェクトである場合は、独自のトークナイザーとインタープリターをローリングすることをお勧めします。これを完全に行うことは困難ですが、十分な解析レイヤーを作成することはかなり簡単です。最初にできる限り最小限の解析レイヤーを作成し、ゲームに豊かさを加えるにつれて段階的に改善することをお勧めします。これは、興味があれば、TDDとデザインパターンを練習するのに適したタイプの問題です。これらのプラクティスを使用すると、段階的に改善を行うことが容易になります。

一方、その演習で多くの価値が得られない場合(スケジュールが厳しい場合、これは実際の作業用であり、解析レイヤーは気にしないなど)、作成することをお勧めします。既存のパーサーを使用します。抽象化の背後にサードパーティのパーサーをカプセル化する場合、後で自分で作成することや、使用するパーサーについて考えを変えることができます。

あなたはおそらくそれをすでに見たでしょう、しかしこのSOの質問はc#のためのパーサーの素晴らしいリストを持っているように見えます。

于 2013-01-26T14:43:04.033 に答える