ÿØÿà JFIF ` ` ÿþxØ
| Server IP : 109.234.164.53 / Your IP : 216.73.216.110 Web Server : Apache System : Linux cervelle.o2switch.net 4.18.0-553.32.1.lve.el8.x86_64 #1 SMP Thu Dec 19 13:14:03 UTC 2024 x86_64 User : computer3 ( 1098) PHP Version : 7.1.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /opt/alt/python37/share/doc/alt-python37-pyparsing-doc/examples/ |
Upload File : |
# SimpleCalc.py
#
# Demonstration of the parsing module,
# Sample usage
#
# $ python SimpleCalc.py
# Type in the string to be parse or 'quit' to exit the program
# > g=67.89 + 7/5
# 69.29
# > g
# 69.29
# > h=(6*g+8.8)-g
# 355.25
# > h + 1
# 356.25
# > 87.89 + 7/5
# 89.29
# > ans+10
# 99.29
# > quit
# Good bye!
#
#
# Uncomment the line below for readline support on interactive terminal
# import readline
from pyparsing import ParseException, Word, alphas, alphanums
# Debugging flag can be set to either "debug_flag=True" or "debug_flag=False"
debug_flag = False
variables = {}
from fourFn import BNF, exprStack, evaluate_stack
# from fourFn import BNF, exprStack, fn, opn
# def evaluateStack( s ):
# op = s.pop()
# if op == 'unary -':
# return -evaluateStack( s )
# if op in "+-*/^":
# op2 = evaluateStack( s )
# op1 = evaluateStack( s )
# return opn[op]( op1, op2 )
# elif op == "PI":
# return math.pi # 3.1415926535
# elif op == "E":
# return math.e # 2.718281828
# elif op in fn:
# return fn[op]( evaluateStack( s ) )
# elif op[0].isalpha():
# if op in variables:
# return variables[op]
# raise Exception("invalid identifier '%s'" % op)
# else:
# return float( op )
arithExpr = BNF()
ident = Word(alphas, alphanums).setName("identifier")
assignment = ident("varname") + "=" + arithExpr
pattern = assignment | arithExpr
if __name__ == "__main__":
# input_string
input_string = ""
# Display instructions on how to quit the program
print("Type in the string to be parsed or 'quit' to exit the program")
input_string = input("> ")
while input_string.strip().lower() != "quit":
if input_string.strip().lower() == "debug":
debug_flag = True
input_string = input("> ")
continue
# Reset to an empty exprStack
del exprStack[:]
if input_string != "":
# try parsing the input string
try:
L = pattern.parseString(input_string, parseAll=True)
except ParseException as err:
L = ["Parse Failure", input_string, (str(err), err.line, err.column)]
# show result of parsing the input string
if debug_flag:
print(input_string, "->", L)
if len(L) == 0 or L[0] != "Parse Failure":
if debug_flag:
print("exprStack=", exprStack)
for i, ob in enumerate(exprStack):
if isinstance(ob, str) and ob in variables:
exprStack[i] = str(variables[ob])
# calculate result , store a copy in ans , display the result to user
try:
result = evaluate_stack(exprStack)
except Exception as e:
print(str(e))
else:
variables["ans"] = result
print(result)
# Assign result to a variable if required
if L.varname:
variables[L.varname] = result
if debug_flag:
print("variables=", variables)
else:
print("Parse Failure")
err_str, err_line, err_col = L[-1]
print(err_line)
print(" " * (err_col - 1) + "^")
print(err_str)
# obtain new input string
input_string = input("> ")
# if user type 'quit' then say goodbye
print("Good bye!")