summaryrefslogtreecommitdiff
path: root/examples/shapes.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/shapes.py')
-rw-r--r--examples/shapes.py128
1 files changed, 64 insertions, 64 deletions
diff --git a/examples/shapes.py b/examples/shapes.py
index 2df8572..55af19a 100644
--- a/examples/shapes.py
+++ b/examples/shapes.py
@@ -1,64 +1,64 @@
-# shapes.py
-#
-# A sample program showing how parse actions can convert parsed
-# strings into a data type or object.
-#
-# Copyright 2012, Paul T. McGuire
-#
-
-# define class hierarchy of Shape classes, with polymorphic area method
-class Shape(object):
- def __init__(self, tokens):
- self.__dict__.update(tokens.asDict())
-
- def area(self):
- raise NotImplementedException()
-
- def __str__(self):
- return "<{0}>: {1}".format(self.__class__.__name__, self.__dict__)
-
-class Square(Shape):
- def area(self):
- return self.side**2
-
-class Rectangle(Shape):
- def area(self):
- return self.width * self.height
-
-class Circle(Shape):
- def area(self):
- return 3.14159 * self.radius**2
-
-
-from pyparsing import *
-
-number = Regex(r'-?\d+(\.\d*)?').setParseAction(lambda t:float(t[0]))
-
-# Shape expressions:
-# square : S <centerx> <centery> <side>
-# rectangle: R <centerx> <centery> <width> <height>
-# circle : C <centerx> <centery> <diameter>
-
-squareDefn = "S" + number('centerx') + number('centery') + number('side')
-rectDefn = "R" + number('centerx') + number('centery') + number('width') + number('height')
-circleDefn = "C" + number('centerx') + number('centery') + number('diameter')
-
-squareDefn.setParseAction(Square)
-rectDefn.setParseAction(Rectangle)
-
-def computeRadius(tokens):
- tokens['radius'] = tokens.diameter/2.0
-circleDefn.setParseAction(computeRadius, Circle)
-
-shapeExpr = squareDefn | rectDefn | circleDefn
-
-tests = """\
-C 0 0 100
-R 10 10 20 50
-S -1 5 10""".splitlines()
-
-for t in tests:
- shape = shapeExpr.parseString(t)[0]
- print(shape)
- print("Area:", shape.area())
- print()
+# shapes.py
+#
+# A sample program showing how parse actions can convert parsed
+# strings into a data type or object.
+#
+# Copyright 2012, 2019 Paul T. McGuire
+#
+
+# define class hierarchy of Shape classes, with polymorphic area method
+class Shape(object):
+ def __init__(self, tokens):
+ self.__dict__.update(tokens.asDict())
+
+ def area(self):
+ raise NotImplemented()
+
+ def __str__(self):
+ return "<{0}>: {1}".format(self.__class__.__name__, vars(self))
+
+class Square(Shape):
+ def area(self):
+ return self.side**2
+
+class Rectangle(Shape):
+ def area(self):
+ return self.width * self.height
+
+class Circle(Shape):
+ def area(self):
+ return 3.14159 * self.radius**2
+
+
+import pyparsing as pp
+
+number = pp.Regex(r'-?\d+(\.\d*)?').setParseAction(lambda t: float(t[0]))
+
+# Shape expressions:
+# square : S <centerx> <centery> <side>
+# rectangle: R <centerx> <centery> <width> <height>
+# circle : C <centerx> <centery> <diameter>
+
+squareDefn = "S" + number('centerx') + number('centery') + number('side')
+rectDefn = "R" + number('centerx') + number('centery') + number('width') + number('height')
+circleDefn = "C" + number('centerx') + number('centery') + number('diameter')
+
+squareDefn.setParseAction(Square)
+rectDefn.setParseAction(Rectangle)
+
+def computeRadius(tokens):
+ tokens['radius'] = tokens.diameter/2.0
+circleDefn.setParseAction(computeRadius, Circle)
+
+shapeExpr = squareDefn | rectDefn | circleDefn
+
+tests = """\
+C 0 0 100
+R 10 10 20 50
+S -1 5 10""".splitlines()
+
+for t in tests:
+ shape = shapeExpr.parseString(t)[0]
+ print(shape)
+ print("Area:", shape.area())
+ print()