问题:为文法G(A构造递归下降分析程序: 1. A->аA'|ьВс 2. A'->d Ac 3. B->aA bB
代码:
def G():
global index, lookahead
lookahead = input_str[index]
if lookahead == 'a':
match('a')
A()
match('b')
B()
elif lookahead == 'ь':
match('ь')
C()
match('c')
else:
raise Exception('Syntax error')
def A():
global index, lookahead
if lookahead == 'а':
match('а')
A_prime()
elif lookahead == 'ь' or lookahead == 'b':
pass
else:
raise Exception('Syntax error')
def A_prime():
global index, lookahead
if lookahead == 'd':
match('d')
A()
match('c')
else:
raise Exception('Syntax error')
def B():
global index, lookahead
if lookahead == 'b':
match('b')
B()
elif lookahead == 'c':
pass
else:
raise Exception('Syntax error')
def C():
global index, lookahead
if lookahead == 'a':
match('a')
A()
else:
raise Exception('Syntax error')
def match(expected):
global index, lookahead
if lookahead == expected:
index += 1
if index < len(input_str):
lookahead = input_str[index]
else:
raise Exception('Syntax error')
其中,index
表示当前扫描到的字符在输入字符串中的下标,lookahead
表示当前扫描到的字符。match(expected)
函数用于匹配当前扫描到的字符是否为 expected
,如果是,则将扫描下标 index
加 1,并更新 lookahead
。如果不是,则抛出语法错误异常。
如有其他做法,请自由发挥。