我需要重写EBNF中的语法。使用自顶向下的递归下降方法实现解析器 (即tdrd parser.py)在python3中用于EBNF语法。输入数据文件名由 命令行。假设两个端子之间有一个空格字符 (例如a c b)在数据文件中
下面是语法:
<S> -> <A> c c <B> | <B> d d <A>
<A> -> a <A> | a
<B> -> b <B> | b
代码如下:
import sys
def lexan():
global mitr
try:
return next(mitr)
except StopIteration:
return ''
def match(ch):
global lookahead
if ch == lookahead:
lookahead = lexan()
else:
print("Syntax Error")
exit()
def S():
#<S> -> <A> c c <B> | <B> d d <A>
global lookahead
if lookahead == 'a':
A()
#match('c')
C()
elif lookahead == 'b':
B()
#match('c')
C()
else:
print("Syntax Error")
exit()
def A():
# <A> -> a <A> | a
global lookahead
match('a')
if lookahead == 'a':
A()
def B(): # <B> -> b <B> | b
global lookahead
match('b')
if lookahead == 'b':
B()
def C():
global lookahead
match('c')
if lookahead == 'c':
C()
file = open(sys.argv[1], "r")
wlist = file.read().split()
mitr = iter(wlist)
lookahead = lexan()
S()
if lookahead == '':
print("Pass")
else:
print("Syntax Error")
exit()
每当我运行它时:python3 tdrd_parser.py data.txt如果我从文件中删除b,我会得到一个“通过”。否则-语法错误
你能帮忙吗
目前没有回答
相关问题 更多 >
编程相关推荐