<!-- MHonArc v2.4.4 --> <!--X-Subject: [MUD-Dev] Text Parsing --> <!--X-From-R13: Oyoreg <gurpurrmrznaNrneguyvax.arg> --> <!--X-Date: Fri, 28 May 1999 11:51:42 -0700 --> <!--X-Message-Id: 199905281836.LAA11685#penguin,prod.itd.earthlink.net --> <!--X-Content-Type: text/plain --> <!--X-Head-End--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>MUD-Dev message, [MUD-Dev] Text Parsing</title> <!-- meta name="robots" content="noindex,nofollow" --> <link rev="made" href="mailto:thecheezeman#earthlink,net"> </head> <body background="/backgrounds/paperback.gif" bgcolor="#ffffff" text="#000000" link="#0000FF" alink="#FF0000" vlink="#006000"> <font size="+4" color="#804040"> <strong><em>MUD-Dev<br>mailing list archive</em></strong> </font> <br> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] <br clear=all><hr> <!--X-Body-Begin--> <!--X-User-Header--> <!--X-User-Header-End--> <!--X-TopPNI--> Date: [ <a href="msg00335.html">Previous</a> | <a href="msg00337.html">Next</a> ] Thread: [ <a href="msg00370.html">Previous</a> | <a href="msg00340.html">Next</a> ] Index: [ <A HREF="author.html#00336">Author</A> | <A HREF="#00336">Date</A> | <A HREF="thread.html#00336">Thread</A> ] <!--X-TopPNI-End--> <!--X-MsgBody--> <!--X-Subject-Header-Begin--> <H1>[MUD-Dev] Text Parsing</H1> <HR> <!--X-Subject-Header-End--> <!--X-Head-of-Message--> <UL> <LI><em>To</em>: MUD Dev List <<A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A>></LI> <LI><em>Subject</em>: [MUD-Dev] Text Parsing</LI> <LI><em>From</em>: Albert <<A HREF="mailto:thecheezeman#earthlink,net">thecheezeman#earthlink,net</A>></LI> <LI><em>Date</em>: Fri, 28 May 1999 14:35:49 -0500</LI> <LI><em>Reply-To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A></LI> <LI><em>Sender</em>: <A HREF="mailto:mud-dev-admin#kanga,nu">mud-dev-admin#kanga,nu</A></LI> </UL> <!--X-Head-of-Message-End--> <!--X-Head-Body-Sep-Begin--> <HR> <!--X-Head-Body-Sep-End--> <!--X-Body-of-Message--> <PRE> Delurking :) I'm currently building a text adventure game, with intentions of expanding it into some sort of mud server once I master network programming. In any case, I was spending some time thinking about how to parse text and came to the follow conclusion. Nearly any command can be broken apart into four different strings: verb, direct object, indirect object, and adjectives. I have a class called ParsedCommand that looks like this: class ParsedCommand { public: string verb; string direct_object; // Noun being manipulated string indirect_object; // Noun that receives the action string direct_object_adj; // Adjectives describing direct object string indirect_object_adj; // Adjectives describing the indirect object bool IsNewClause; } Then say the player enter a command like: buy the biggest ball from the 3rd shopkeeper The convoluted pseudocode would be: void Parse(string & rhs) { ParsedCommand pc; string word; while (1) { word = GetNextWord(rhs); // Would magically keep pointer position if (word.empty()) break; switch (GetKind(word)) { case VERB: if (pc.IsNewClause) pc.verb = word; else SendToQueue(pc); break; case DIRECT_OBJECT: if (pc.IsNewClause) { pc.direct_object = word; pc.IsNewClause = false; } else pc.direct_object += " " += word; break; case INDIRECT_OBJECT: case ADJECTIVE: // Pretty much the same code for direct_object case CONJUNCTION: SendToQueue(pc); // Would send a copy to the queue, but pc still exists pc.IsNewClause = true; // Not technically true, but... break; } } } I know, this system is hugely inefficient. But I believe it allows the user to enter complicated commands like "get the red ball and the 4th rock then kill the troll and ogre". Because pc persists, it can use data interpreted from previous commands and simply send copies to the work queue. Comments? -- Author: Albert Yi (TheCheeseMan) ICQ: 14617788 home.earthlink.net/~thecheezeman AOL: EvlWombat Author: Albert Yi (TheCheeseMan) ICQ: 14617788 home.earthlink.net/~thecheezeman _______________________________________________ MUD-Dev maillist - MUD-Dev#kanga,nu <A HREF="http://www.kanga.nu/lists/listinfo/mud-dev">http://www.kanga.nu/lists/listinfo/mud-dev</A> </PRE> <!--X-Body-of-Message-End--> <!--X-MsgBody-End--> <!--X-Follow-Ups--> <HR> <ul compact><li><strong>Follow-Ups</strong>: <ul> <li><strong><A NAME="00357" HREF="msg00357.html">Re: [MUD-Dev] Text Parsing</A></strong> <ul compact><li><em>From:</em> Travis Casey <efindel#io,com></li></ul> <li><strong><A NAME="00348" HREF="msg00348.html">Re: [MUD-Dev] Text Parsing</A></strong> <ul compact><li><em>From:</em> Mik Clarke <mikclrk#ibm,net></li></ul> <li><strong><A NAME="00342" HREF="msg00342.html">Re: [MUD-Dev] Text Parsing</A></strong> <ul compact><li><em>From:</em> Greg Miller <gmiller#classic-games,com></li></ul> <li><strong><A NAME="00340" HREF="msg00340.html">Re: [MUD-Dev] Text Parsing</A></strong> <ul compact><li><em>From:</em> "Kylotan" <kylotan#kylotan,force9.co.uk></li></ul> </UL></LI></UL> <!--X-Follow-Ups-End--> <!--X-References--> <!--X-References-End--> <!--X-BotPNI--> <UL> <LI>Prev by Date: <STRONG><A HREF="msg00335.html">[MUD-Dev] Searching the archives</A></STRONG> </LI> <LI>Next by Date: <STRONG><A HREF="msg00337.html">Re: [MUD-Dev] Multi-threaded mud server.</A></STRONG> </LI> <LI>Prev by thread: <STRONG><A HREF="msg00370.html">Re: [MUD-Dev] Re: Re: [MUD-Dev] Text Parsing</A></STRONG> </LI> <LI>Next by thread: <STRONG><A HREF="msg00340.html">Re: [MUD-Dev] Text Parsing</A></STRONG> </LI> <LI>Index(es): <UL> <LI><A HREF="index.html#00336"><STRONG>Date</STRONG></A></LI> <LI><A HREF="thread.html#00336"><STRONG>Thread</STRONG></A></LI> </UL> </LI> </UL> <!--X-BotPNI-End--> <!--X-User-Footer--> <!--X-User-Footer-End--> <ul><li>Thread context: <BLOCKQUOTE><UL> <LI><strong><A NAME="00344" HREF="msg00344.html">[MUD-Dev] Re: Re: [MUD-Dev] Text Parsing</A></strong>, Albert <a href="mailto:thecheezeman#earthlink,net">thecheezeman#earthlink,net</a>, Sat 29 May 1999, 01:24 GMT <UL> <li><Possible follow-up(s)><br> <LI><strong><A NAME="00360" HREF="msg00360.html">[MUD-Dev] Re: Re: [MUD-Dev] Text Parsing</A></strong>, Albert <a href="mailto:thecheezeman#earthlink,net">thecheezeman#earthlink,net</a>, Mon 31 May 1999, 21:37 GMT <UL> <LI><strong><A NAME="00367" HREF="msg00367.html">Re: [MUD-Dev] Re: Re: [MUD-Dev] Text Parsing</A></strong>, Travis Casey <a href="mailto:efindel#io,com">efindel#io,com</a>, Tue 01 Jun 1999, 02:21 GMT </LI> <LI><strong><A NAME="00370" HREF="msg00370.html">Re: [MUD-Dev] Re: Re: [MUD-Dev] Text Parsing</A></strong>, Mik Clarke <a href="mailto:mikclrk#ibm,net">mikclrk#ibm,net</a>, Tue 01 Jun 1999, 05:48 GMT </LI> </UL> </LI> </UL> </LI> <LI><strong><A NAME="00336" HREF="msg00336.html">[MUD-Dev] Text Parsing</A></strong>, Albert <a href="mailto:thecheezeman#earthlink,net">thecheezeman#earthlink,net</a>, Fri 28 May 1999, 18:51 GMT <UL> <LI><strong><A NAME="00340" HREF="msg00340.html">Re: [MUD-Dev] Text Parsing</A></strong>, Kylotan <a href="mailto:kylotan#kylotan,force9.co.uk">kylotan#kylotan,force9.co.uk</a>, Fri 28 May 1999, 21:08 GMT </LI> <LI><strong><A NAME="00342" HREF="msg00342.html">Re: [MUD-Dev] Text Parsing</A></strong>, Greg Miller <a href="mailto:gmiller#classic-games,com">gmiller#classic-games,com</a>, Sat 29 May 1999, 00:51 GMT </LI> <LI><strong><A NAME="00348" HREF="msg00348.html">Re: [MUD-Dev] Text Parsing</A></strong>, Mik Clarke <a href="mailto:mikclrk#ibm,net">mikclrk#ibm,net</a>, Sat 29 May 1999, 21:14 GMT </LI> <LI><strong><A NAME="00357" HREF="msg00357.html">Re: [MUD-Dev] Text Parsing</A></strong>, Travis Casey <a href="mailto:efindel#io,com">efindel#io,com</a>, Mon 31 May 1999, 03:34 GMT </LI> </UL> </LI> </UL></BLOCKQUOTE> </ul> <hr> <center> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] </center> <hr> </body> </html>