Lyt
posts - 16,comments - 61,trackbacks - 0

一、词法分析器Lexer

1.使用之前自己写的正则表达式引擎简化版(没有匿名捕获)完成词法分析

2.遇到错误则记录下错误信息,并跳过此错误继续分析

3.词法分析的结果记录了记号串、对应的类型和行号

4.因为没判断该记号串是否为关键字等,给语法分析带来许多不必要的麻烦

二、语法分析器Parser

1.用上下文无关文法和类似于状态机的方法递归向下构造语法分析树

2.用继承的方法来存储语法树

3.构造语法树和存储语法树是相对独立的两个部分

4.构造语法树的过程中遇到错误抛出异常前应释放内存,容易出现内存泄漏,使用智能指针LytPtr解决此问题

5.错误信息包括出错原因、行号

三、语义检查

1.表达式才有类型,语句、函数没有类型

2.表达式是GetType,语句、函数是CheckType

3.类型检查函数声明为虚函数是比较方便的,同样使用了递归向下的方法

4.类型检查包括以下内容:

(1)表达式

a.常量表达式:整型、浮点型、布尔型

b.变量表达式:该变量是否被声明过

c.一元表达式、二元表达式:操作符与操作数类型是否匹配

d.函数调用表达式:函数是否被定义,参数个数、参数类型是否匹配函数原型

(2)语句

a.赋值语句:左操作数必须是左值(变量表达式),左右操作数类型是否一致

b.if语句、while语句、dowhile语句:条件表达式必须是布尔型

c.跳转语句break、continue只能出现在循环中

d.return语句在function函数中必须带表达式,procedure函数则相反

(3)函数

a.有且只有一个main函数

b.函数不可重载

c.function函数必须有返回类型声明且return语句必须有表达式,procedure函数相反

d.参数和变量不可重定义

四、虚拟机

1.堆栈里只存储基本数据(原本我存储的是字符串,修改后速度提高许多)

2.设计指令集并生成中间代码,使用了递归向下的方法(虚函数)

3.遇到一些运行错误抛出异常,如除以0

五、其他问题

1.遇到了“名字用完了”的状况,起名字真的非常重要,头一回意识到namespace

2.错误信息应该用#define或者常量字符串来统一管理

3.对于一些常量,如字符串转成浮点型的应该用一个文件以常量形式存起来统一管理

posted on 2009-04-09 22:27 Lyt 阅读(800) 评论(0)  编辑 收藏 引用 所属分类: Pascal简化版

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理