[svn:parrot] r37116 - in trunk: . examples/pasm
coke at svn.parrot.org
coke at svn.parrot.org
Thu Mar 5 03:48:25 UTC 2009
Author: coke
Date: Thu Mar 5 03:48:24 2009
New Revision: 37116
URL: https://trac.parrot.org/parrot/changeset/37116
Log:
[examples] Remove old example that no longer compiles and would take some
effort to retool. (also, written in PASM, not PIR)
Deleted:
trunk/examples/pasm/small.xml
trunk/examples/pasm/xml_parser.pasm
Modified:
trunk/MANIFEST
Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST Thu Mar 5 03:41:14 2009 (r37115)
+++ trunk/MANIFEST Thu Mar 5 03:48:24 2009 (r37116)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Tue Mar 3 13:58:08 2009 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Mar 5 03:46:49 2009 UT
#
# See tools/dev/install_files.pl for documentation on the
# format of this file.
@@ -694,9 +694,7 @@
examples/pasm/hello.pasm [examples]
examples/pasm/nanoforth.pasm [examples]
examples/pasm/nanoforth2.pasm [examples]
-examples/pasm/small.xml [examples]
examples/pasm/trace.pasm [examples]
-examples/pasm/xml_parser.pasm [examples]
examples/past/01-sub.pir [examples]
examples/past/blocktype_immediate.pir [examples]
examples/past/four_plus_one.pir [examples]
Deleted: trunk/examples/pasm/small.xml
==============================================================================
--- trunk/examples/pasm/small.xml Thu Mar 5 03:48:24 2009 (r37115)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,7 +0,0 @@
-<xml version='1.0'>
-<top>
-<inner foo='bar' narf='poit'>
-<junk>Hello</junk>
-<empty/>
-</inner>
-</top>
Deleted: trunk/examples/pasm/xml_parser.pasm
==============================================================================
--- trunk/examples/pasm/xml_parser.pasm Thu Mar 5 03:48:24 2009 (r37115)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,470 +0,0 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-examples/pasm/xml_parser.pasm - Simple XML Parser
-
-=head1 SYNOPSIS
-
- % ./parrot examples/pasm/xml_parser.pasm examples/pasm/small.xml
-
-=head1 DESCRIPTION
-
-This is a rudimentary XML-ish parser in PASM. It currently handles only
-well-formed XML, doesn't throw errors, etc...
-
-Limitations:
-
-=over 4
-
-=item * validation? check for well formedness? Dream on.
-
-=item * elements like C<<> aren't handled yet
-
-=item * bugs-a-plenty, I'm sure.
-
-=back
-
-This is more of a proof-of-concept than anything else. Try putting this
-in a file:
-
- <xml version='1.0'>
- <top>
- <inner foo='bar' narf='poit'>
- <junk>Hello</junk>
- <empty/>
- </inner>
- </top>
-
-And see what it does. :)
-
-See the notes near the C<read()> for IO problem notes.
-
-Register Usage:
-
- S0, S1, S2, S5 -- Temporary Registers
- S7 -- Current token in procintags()
- S10 -- HACK for broken I/O
- S11 -- Character being processed
- I0, I1, I2 -- Temporary Registers
- I7 -- Type of current element
- I8 -- "In Quotes" flag
- I13 -- Type of the last token
-
-The stack is used all to hell. :)
-
-Data is stored on the stack in type/value pairs:
-
- -1 "" (uninitialized slot)
- 0 Element Name
- 1 Attribute Name
- 2 Attribute Value
- 5 Close of Element (no data)
- 6 Close of Element, also start (no data)
- 99 Data associated with this element
- 1000 (no data) sentinel for the bottom of the stack
-
-=cut
-
-# A functions-first kinda guy
- branch MAIN
-
-# Test for alphabeticness (7-bit ASCII only)
-# Input: (1-char) String on stack
-# Output: 0 or 1 (integer) on stack
-# Ex: save "<"
-# bsr ISALPHA
-# restore I2 # False!
-#
-ISALPHA:
- restore S1
-
- ge S1, "A", UPPER
- branch NONUP
-UPPER: le S1, "Z", ALPHA
-
-NONUP:
- ge S1, "a", LOWER
- branch NONLOW
-LOWER: le S1, "z", ALPHA
-
-NONLOW:
- ge S1, "0", NUMBER
- branch NONUM
-NUMBER: le S1, "9", ALPHA
-
-NONUM: eq S1, "_", ALPHA
-
- # Not A-Z0-9_
- set I1, 0
- branch LEAVE_ISALPHA
-
-ALPHA: set I1, 1
-
-LEAVE_ISALPHA:
- save I1
- ret
-
-
-# Fetch a character from the filehandle
-# Inputs: (Supposedly a file somewhere...)
-# Outputs: 1 character from the filehandle
-#
-# **** BUG BUG BUG ***** TEMPORARY ROUTINE
-# For now Parrot's I/O seems completely b0rk3n
-# instead, just pull characters off "S10" which
-# contains the XML to be processed. Trying to perform
-# a read loop with everything else going on smashes the
-# user stack. Sometimes.
-# **** BUG BUG BUG ***** TEMPORARY ROUTINE
-
-FETCH: length I1, S10
- ne I1, 0, GETCHAR
- branch EOF
-
-GETCHAR:
- substr S1, S10, 0, 1
- length I1, S10
- dec I1
- substr S10, S10, 1, I1
- gt I1, 0, NOINIT
- branch EOF
-
-NOINIT: save S1
- ret
-
-EOF: end
-
-
-# Process the internal bits of tags. The processor is really, really
-# crude. For example the first word-thing is the element. The next
-# word-thing is an attribute name, and the next word-thing is the value.
-# Lather, rinse, repeat.
-#
-# Quoted things are obeyed. Because of a string handling SNAFU in either
-# the assembler or Parrot, your attributes have to be *SINGLE* quoted for
-# now.
-#
-PROCINTAG:
- restore S1 # Character we're processing
- restore I7 # Type of thing last on the stack
-
- ne I7, 1000, NOTEOS
- save 1000
- set S7, ""
- branch QUOTECHECK
-NOTEOS: restore S7 # Get element from stack
-
-QUOTECHECK:
- ne S1, "'", NOQUOTE
- eq I8, 1, UNSET
- set I8, 1
- branch NOQUOTE
-UNSET:
- set I8, 0
-NOQUOTE:
-
- ne I13, -1, NOTEND # End tag?
- ne S1, "/", NOTEND
- save ""
- save 5 # CLOSER
- branch EPITE
-
-NOTEND:
- eq I13, -1, NOTBEGEND
- ne S1, "/", NOTBEGEND
- eq I8, 1, NOTBEGEND # start/end tag <foo/>
- save S7
- save I7
- save S7
- save 6 # OPENCLOSER
- branch EPITE
-
-NOTBEGEND:
- save S1
- bsr ISALPHA # isalpha()
- restore I2
- eq I2, 1, PROCALPHA # If it *was* alpha or
- eq I8, 1, PROCALPHA # we were in a quote, goto PROCALPHA
- save S7
- save I7
- eq I7, -1, NOSTART
- save ""
- save -1
-
-NOSTART:
- ne I13, 2, NOTVAL # VALUE
- set I13, 0
-
-NOTVAL:
- branch EPITE
-
-PROCALPHA:
- ne I7, -1, PART2
- eq I8, 1, FOUNDONE
- eq I2, 1, FOUNDONE
- branch PART2
-
-FOUNDONE:
- set I7, I13
- inc I7
- le I7, 2, NOFLOW
- set I7, 2
-NOFLOW:
- set S7, ""
- eq I8, 1, FINALPUSH
- set S7, S1
- branch FINALPUSH
-
-PART2:
- eq I7, -1, FINALPUSH
- eq I2, 1, APPEND
- eq I8, 1, APPEND
- branch FINALPUSH
-
-APPEND:
- concat S7, S1
-
-FINALPUSH:
- eq I7, 1000, EPIT
- save S7
- save I7
-EPIT:
- set I13, I7
-EPITE:
- ret
-
-
-# Decide if this is the beginning of a start tag
-# or the beginning of a start/end tag
-# Peeks at the top thing on the stack to figure
-# out what a > means. This way both the start and end
-# callbacks get called for <foo/>
-DECIDE:
- restore I1
- save I1
- ne I1, 5, NOTCLOSER
- branch ENDTAG
-
-NOTCLOSER:
- ne I1, 6, NOTOPENCLOSER
- bsr STARTTAG
- branch ENDTAG
-
-NOTOPENCLOSER:
- branch STARTTAG
-
-
-
-# #######################
-# USER CALLBACKS ARE HERE
-
-
-# The start callback is called after the start tag
-# is finally processed. You MUST LEAVE the type 0
-# element on the stack when you're done processing!
-#
-# This sample simply prints the element name and the
-# attribute/value pairs.
-
-STARTTAG:
- set S0, ""
-CRAWL:
- restore I1
- eq I1, 1000, NOTATEOSERR
- set S2, ""
- restore S2
- branch NOTATEOSHERE
-
-NOTATEOSERR: # Should never happen
- print "ERROR ERRROR ERROR ERROR\n"
- print I1
- print "\n"
- end
-
-NOTATEOSHERE:
- ne I1, 0, NOTSELEM
- print "Start " # All done w/attrib
- print S2
- print S0
- print "\n"
- save S2
- save I1
- branch ENDSTART
-
-NOTSELEM: # Process attribs on stack
- ne I1, 1, NOTATTRIB
- set S5, S0
- set S0, " "
- concat S0, S2
- concat S0, "="
- concat S0, S5
- branch CRAWL
-
-NOTATTRIB:
- ne I1, 2, NOTVALUE
- set S5, S0
- set S0, S2
- concat S0, S5
-
-NOTVALUE:
- branch CRAWL
-
-ENDSTART:
- ret
-
-
-# This is a sample "end element" handler.
-#
-# A good "end element" handler will possibly print the
-# data that's been acumulated on the stack, etc..
-# At the very least it should remove everthing on the stack
-# back to /and including/ the element itself (type 0).
-
-ENDTAG:
- restore I1
- restore S2
-CLEAN:
- restore I1
- ne I1, 1000, NOTATEOS
- save 1000
- branch ENDENDTAG
-NOTATEOS:
- restore S1
- ne I1, 0, NOTELEM
- print "Close "
- print S2
- print "\n"
- branch ENDENDTAG
-NOTELEM:
- ne I1, 99, ENDENDTAG
- print "Data "
- print S1
- print "\n"
- branch CLEAN
-
-ENDENDTAG:
- ret
-
-# The character handler is called with the character
-# on the stack. Please to be pulling it off. Thank you.
-# Normally char handlers accumulate CDATA seen in the elements.
-# Not necessary. That's handled elsewhere. In *fact* the top
-# of the stack at this point contains the data accumulated so far.
-
-CHAR: restore S0
- ret
-
-# END USER CALLBACKS
-# #######################
-
-#
-# Main Body
-#
-MAIN:
- set I8, 0
-
- # For now, this is the XML that's going to get parsed.
- # When the read() stuff gets fixed, this can be read from
- # a file as it's being processed. For now, slurp it.
- # SMALL FILES ONLY. SMALL. SMALL. SMALL. Parrots I/O
- # GC does not play nice with read().
- set S10, ""
- open P0, "examples/pasm/small.xml", 'r'
- if P0, READ
- print "Couldn't open small.xml\n"
- exit 1
-READ:
- set S0, ""
- read S0, P0, 32768
- length I1, S0
- eq I1, 0, CLOSE
- concat S10, S0
- branch READ
-
-CLOSE:
- close P0
- save 1000 # EOS marker
-
-LOOP: bsr FETCH
- restore S11
- length I0, S11
- eq I0, 0, BAIL
-
- ne S11, "<", NOTLESS # if (char eq "<")
- set I12, 1
- set I13, -1 # Uninit
- restore I1
- save I1
- eq I1, 1000, SSTART
- ne I1, -1 , SSTART
- branch EOPEN
-SSTART:
- save ""
- save -1
-EOPEN: branch CHARP
-
-
-NOTLESS: # if (char eq ">")
- ne S11, ">", NOTGREATER
- set I12, 0
- bsr DECIDE
- branch CHARP
-
-
-NOTGREATER:
-
- ne I12, 0, CHARP # if (! intag)
- restore I1
- ne I1, 1000, DATAC
- save 1000 # Push EOS back on
- branch CHARP
-
-DATAC:
- ne I1, 99, NOTDATAC
- restore S1
- concat S1, S11 # Append data.
- save S1
- save 99
-
- save S11
- bsr CHAR
-
- branch CHARP
-
-NOTDATAC:
- save I1
- eq S1, "\n", CHARP
- save S11
- save 99
-
- save S11
- bsr CHAR # Callback for char()
-
- branch CHARP
-
-CHARP:
- ne I12, 1, CHARPE
- save S11
- bsr PROCINTAG
-CHARPE:
- branch LOOP
-
-
-BAIL:
- close P0
- end
-
-=head1 SEE ALSO
-
-F<examples/pasm/small.xml>.
-
-=head1 HISTORY
-
- (First Parrot Assembler Program)
- Clinton A. Pierce 3/13/2002
- clintp at geeksalad.org
- Freely Redistributable
-
-=cut
More information about the parrot-commits
mailing list