python解释器实现及其嵌入式应用:实现语法支持
2017-02-20 15:14
656 查看
第九部分开始了对语言特性的支持,根据语言定义BNF:
program→compound_statement DOT
compound_statement→BEGIN statement_list END
statement_list→statement | statement SEMI statement_list
statement→compound_statement | assignment_statement | empty
assignment_statement→variable ASSIGN expr
variable→ID
empty→
expr→term ((PLUS | MINUS) TERM)∗
term→factor ((MUL | DIV) factor)∗
factor→PLUS factor | MINUS factor | INTEGER | LPAREN expr RPAREN | variable
符号表。由于引入了变量,如何再次访问到这些变量呢?把他们放到符号表中,这里只有一个全局符号表
新的grammar规则设计的理论知识其实就是LL(1)。什么是LL(1)?
program→compound_statement DOT
compound_statement→BEGIN statement_list END
statement_list→statement | statement SEMI statement_list
statement→compound_statement | assignment_statement | empty
assignment_statement→variable ASSIGN expr
variable→ID
empty→
expr→term ((PLUS | MINUS) TERM)∗
term→factor ((MUL | DIV) factor)∗
factor→PLUS factor | MINUS factor | INTEGER | LPAREN expr RPAREN | variable
知识点梳理
计算机程序语言的一些基本知识,譬如什么是表达式(expression),什么是语句(statement)。符号表。由于引入了变量,如何再次访问到这些变量呢?把他们放到符号表中,这里只有一个全局符号表
GLOBAL_SCOPE
新的grammar规则设计的理论知识其实就是LL(1)。什么是LL(1)?
练习
1. 关键字的大小写敏感问题
在读取id的时候,根据ID的大写字符串去关键字中搜索,如果有则返回大写关键字,也就是说不管程序中的关键字是大写还是小写,内部始终是用的大写的方式。token = RESERVED_KEYWORDS.get(result.upper(), Token(ID, result))
2. 把’/’转换成关键字div
RESERVED_KEYWORDS = { 'DIV': Token('DIV', 'DIV'), 'BEGIN': Token('BEGIN', 'BEGIN'), 'END': Token('END', 'END'), } #if self.current_char == '/': # self.advance() # return Token(DIV, '/')
3. 修改解释器,使得支持下划线开始的名字命名
def _id(self): ... while self.current_char is not None and (self.current_char.isalnum() or self.current_char == '_'): ... def get_next_token(self): ... if self.current_char.isalpha() or self.current_char == '_': return self._id() ...
相关文章推荐
- python解释器实现及其嵌入式应用:抽象语法树
- python解释器实现及其嵌入式应用:一个四则运算计算器的实现
- python解释器实现及其嵌入式应用:专栏介绍
- python解释器实现及其嵌入式应用:7到11章总结
- python解释器实现及其嵌入式应用:解释器移植
- python解释器实现及其嵌入式应用:认识Micro Python
- 嵌入式 linux 智能设备应用中 web 支持的实现(一)
- Python实现贝叶斯推断及其互联网应用:拼写检查
- 机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用
- 嵌入式 linux 智能设备应用中 web 支持的实现(二)
- python解释器实现以及嵌入式应用:符号表以及语法检查
- KNN算法的Python实现及其应用实例
- 嵌入式 linux 智能设备应用中 web 支持的实现(二)
- 机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用
- python解释器实现及其嵌入式应用:1到6章总结
- python解释器实现及其嵌入式应用:Let's Build a Simple Interpreter(part12)
- python算法和数据结构笔记--python下堆栈的实现及其应用
- 队列(Queue)的python实现及其应用
- 嵌入式 linux 智能设备应用中 web 支持的实现
- 嵌入式 linux 智能设备应用中 web 支持的实现(二)