python递归下降语法分析器程序
时间: 2024-01-06 14:53:29 浏览: 210
下面是一个简单的Python递归下降语法分析器程序的示例:
```python
class Parser:
def __init__(self, tokens):
self.tokens = tokens
self.pos = 0
def parse(self):
return self.expr()
def expr(self):
return self.term() + self.expr_tail()
def expr_tail(self):
if self.match('+'):
self.advance()
return self.term() + self.expr_tail()
elif self.match('-'):
self.advance()
return self.term() - self.expr_tail()
else:
return 0
def term(self):
return self.factor() * self.term_tail()
def term_tail(self):
if self.match('*'):
self.advance()
return self.factor() * self.term_tail()
elif self.match('/'):
self.advance()
return self.factor() / self.term_tail()
else:
return 1
def factor(self):
if self.match('('):
self.advance()
result = self.expr()
self.expect(')')
return result
else:
return self.number()
def number(self):
token = self.tokens[self.pos]
self.expect('NUMBER')
return int(token[1])
def expect(self, token_type):
token = self.tokens[self.pos]
if token[0] == token_type:
self.advance()
else:
raise Exception(f'Expected {token_type}, but got {token[0]}')
def match(self, token_type):
return self.tokens[self.pos][0] == token_type
def advance(self):
self.pos += 1
```
该程序实现了一个简单的四则运算语法分析器,它可以解析像 "2 + 3 * 4" 这样的表达式,并计算其结果。程序使用了递归下降的方法,每个语法规则都对应一个函数。在每个函数中,程序首先尝试匹配当前位置的 token,如果匹配成功则将位置往后移动,否则抛出异常。然后程序按照语法规则递归调用其他函数,最终返回计算结果。
阅读全文