<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Temp%2FParser</id>
	<title>Temp/Parser - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Temp%2FParser"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Temp/Parser&amp;action=history"/>
	<updated>2026-05-16T03:53:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=Temp/Parser&amp;diff=39605&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Temp/Parser&amp;diff=39605&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &lt;br /&gt;
 #VendingMachineParser.py&lt;br /&gt;
 &lt;br /&gt;
 import shlex,sys &lt;br /&gt;
 from cStringIO import StringIO &lt;br /&gt;
  &lt;br /&gt;
 class VendingCmd: &lt;br /&gt;
     def __init__(self,cmd,**kwargs): &lt;br /&gt;
         self.cmd = cmd &lt;br /&gt;
         self.__dict__.update(kwargs) &lt;br /&gt;
     def __repr__(self): &lt;br /&gt;
         s = &amp;#039;%s(&amp;#039; % self.cmd &lt;br /&gt;
         for item in self.__dict__.items(): &lt;br /&gt;
             if item[0] != &amp;#039;cmd&amp;#039;: &lt;br /&gt;
                 s += &amp;#039; %s=%s&amp;#039; % item &lt;br /&gt;
         return s + &amp;#039; )&amp;#039; &lt;br /&gt;
  &lt;br /&gt;
 class Parser: &lt;br /&gt;
     def __init__(self,aStream=sys.stderr): &lt;br /&gt;
         self.outstream=aStream &lt;br /&gt;
     def next_token(self): &lt;br /&gt;
         tok = self.lexer.get_token() &lt;br /&gt;
         if not tok: &lt;br /&gt;
             self.err(&amp;#039;Unexpected end of file&amp;#039;) &lt;br /&gt;
         return tok &lt;br /&gt;
     def next_number(self,func=int): &lt;br /&gt;
         tok = self.next_token() &lt;br /&gt;
         if tok: &lt;br /&gt;
             try: tok = func(tok) &lt;br /&gt;
             except ValueError: &lt;br /&gt;
                 return self.err(&amp;#039;Expected a number, not &amp;#039;+tok) &lt;br /&gt;
         return tok &lt;br /&gt;
     def next_money(self): &lt;br /&gt;
         num=self.next_number() &lt;br /&gt;
         if num not in (10,50,100,500,1000): &lt;br /&gt;
             return self.err(&amp;#039;Unexpected money type&amp;#039;) &lt;br /&gt;
         return num &lt;br /&gt;
  &lt;br /&gt;
     def next_button(self): &lt;br /&gt;
         tok=self.lexer.get_token() &lt;br /&gt;
         if tok not in (&amp;#039;black&amp;#039;,&amp;#039;white&amp;#039;,&amp;#039;sugar_black&amp;#039;,&amp;#039;sugar_white&amp;#039;): &lt;br /&gt;
             return self.err(&amp;#039;Unexpected button type&amp;#039;) &lt;br /&gt;
         return tok &lt;br /&gt;
  &lt;br /&gt;
     def err(self,msg): &lt;br /&gt;
         self.outstream.write(self.lexer.error_leader()+msg+&amp;#039;\n&amp;#039;) &lt;br /&gt;
  &lt;br /&gt;
     def parse_put(self): &lt;br /&gt;
         money = self.next_money() &lt;br /&gt;
         if money: return VendingCmd(&amp;#039;put&amp;#039;,arg=money) &lt;br /&gt;
  &lt;br /&gt;
     def parse_push(self): &lt;br /&gt;
         button=self.next_button() &lt;br /&gt;
         if button: return VendingCmd(&amp;#039;push&amp;#039;,arg=button) &lt;br /&gt;
  &lt;br /&gt;
     def parse(self,aString=None,aStream=None,aName=None): &lt;br /&gt;
         if aString: &lt;br /&gt;
             aStream=StringIO(aString) &lt;br /&gt;
         lexer=shlex.shlex(aStream,aName) &lt;br /&gt;
         lexer.source = &amp;#039;include&amp;#039; &lt;br /&gt;
         lexer.wordchars += &amp;#039;.,-&amp;#039; &lt;br /&gt;
         self.lexer=lexer &lt;br /&gt;
         cmds = [] &lt;br /&gt;
         while 1: &lt;br /&gt;
             tok = lexer.get_token() &lt;br /&gt;
             if not tok: &lt;br /&gt;
                 break &lt;br /&gt;
             try: &lt;br /&gt;
                 parser = getattr(self,&amp;#039;parse_%s&amp;#039;%tok) &lt;br /&gt;
             except: &lt;br /&gt;
                 self.err(&amp;#039;Unknown command: &amp;#039;+tok) &lt;br /&gt;
                 continue &lt;br /&gt;
             cmd=parser() &lt;br /&gt;
             if cmd is None: &lt;br /&gt;
                 continue &lt;br /&gt;
             cmds.append(cmd) &lt;br /&gt;
         return cmds &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
 if __name__==&amp;#039;__main__&amp;#039;: &lt;br /&gt;
     err=StringIO() &lt;br /&gt;
     p=Parser(err) &lt;br /&gt;
     cmds=p.parse(&amp;quot;put 30 put 50 put 1000&amp;quot;) &lt;br /&gt;
     print cmds &lt;br /&gt;
     print `err.getvalue()`&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>