我试图编写一个解析器,它将表达式作为文件的输入。在
表达式可以是A=B=10或B=(C-A)-4等
到目前为止我所尝试的是。我在看一份文件IP.txt文件在
import re
opert = '+-/*()_='
fileName = "input.txt"
f = open(fileName,'r')
variableDict = {}
lines = f.readlines()
for i in lines:
for x in re.finditer(r'[A-Z_]\w*', i):
print x.group() # prints list containing all the alphabets.
for z in re.finditer(r'[0-9]\d*', i):
print z.group() # prints list containing all the numbers.
for c in i:
if c in opert:
print c # prints all the operators.
# '_' has special meaning. '_' can only be used before numbers only like _1 or _12 etc
#And i have parsed this also using
print re.findall(r'[_][0-9]\d+',i) # prints the _digits combination.
现在的问题是我突然想到了我应该如何进行表达式求值。 首先,我必须提到的一些规则是。 任何行不得超过50个字符。 最左边的运算符将始终是“=”赋值运算符。 “=”前面总是有变量[A-Z],运算符是{'+'、'-'、'/'、'*'、'''}、数字{0-9}。在
我应该如何首先提取第一个变量,然后将其放入python列表,然后使用“=”运算符,然后使用“(”、“A-Z”将其推入堆栈等等)
有人能帮我解决这个问题吗。我被问题弄得不知所措。。在
如果有人不能理解描述请goto this link
所以,你问了堆栈问题,当然你需要评估这个问题。我会这样做:
前三行只是一些初始的东西。之后,我将在第四行使用regex创建一个堆栈。
(?:[A-Z])
匹配变量,(?:[0-9]+)
匹配数字(可能有多个数字),(?:[/*+_=\(\)-])
匹配所有运算符。大括号被转义,并且-
在末尾,所以您不必转义它。在第五行和第六行打印堆栈。在
我使用
(?: ...)
因为我不想匹配任何一个组。很难解释-只需尝试在不使用?:
的情况下运行它,您将看到效果。在相关问题 更多 >
编程相关推荐