【发布时间】:2013-03-28 13:01:54
【问题描述】:
我正在尝试编写一个解析器,它将表达式作为文件的输入。
表达式可以是 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
【问题讨论】:
-
你需要在那里修复你的缩进。混合制表符和空格确实不适用于 Stack Overflow。
-
抱歉格式化,我是stackoverflow的新手,学习如何正确使用它。
标签: python regex stack automata