summaryrefslogtreecommitdiff
path: root/src/pyparsing.py
diff options
context:
space:
mode:
authorPaul McGuire <ptmcg@austin.rr.com>2016-06-08 21:52:35 +0000
committerPaul McGuire <ptmcg@austin.rr.com>2016-06-08 21:52:35 +0000
commit860bb72707afaa7bf62afd08abb1e34ccc68a020 (patch)
tree841fd66945123803592dc7b21c355535c94e06f1 /src/pyparsing.py
parent8ed2a4b42750cb599e380a5c64b9650412363ae9 (diff)
downloadpyparsing-git-860bb72707afaa7bf62afd08abb1e34ccc68a020.tar.gz
Add support in pyparsing_common for fractions and mixed integer-fraction values
Diffstat (limited to 'src/pyparsing.py')
-rw-r--r--src/pyparsing.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/pyparsing.py b/src/pyparsing.py
index e68b78c..4c1eca7 100644
--- a/src/pyparsing.py
+++ b/src/pyparsing.py
@@ -3962,19 +3962,27 @@ class pyparsing_common:
"""
integer = Word(nums).setName("integer").setParseAction(convertToInteger)
- """expression that parses an unsigned integer and returns an int"""
+ """expression that parses an unsigned integer, returns an int"""
hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
- """expression that parses a hexadecimal integer and returns an int"""
+ """expression that parses a hexadecimal integer, returns an int"""
signedInteger = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
- """expression that parses an integer with optional leading sign and returns an int"""
+ """expression that parses an integer with optional leading sign, returns an int"""
+
+ fraction = signedInteger.addParseAction(convertToFloat) + '/' + signedInteger.addParseAction(convertToFloat)
+ """fractional expression of an integer divided by an integer, returns a float"""
+ fraction.addParseAction(lambda t: t[0]/t[-1])
+
+ mixed_integer = fraction | integer + Optional(Optional('-').suppress() + fraction)
+ """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
+ mixed_integer.addParseAction(lambda t: sum(t))
real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
"""expression that parses a floating point number and returns a float"""
- sciReal = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientfic notation").setParseAction(convertToFloat)
- """expression that parses a floating point number with optional scientfic notation and returns a float"""
+ sciReal = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
+ """expression that parses a floating point number with optional scientific notation and returns a float"""
# streamlining this expression makes the docs nicer-looking
numeric = (sciReal | real | signedInteger).streamline()