下定决心重新设计语言规范,重写编译器和从新编写开发环境。第一版本的编译器因没有从头就规定严格唯一的语法规范,导致需要执行太多无谓的逻辑。
一、重新设计语言规范
语法规范是文法设计和语义函数定义的最基本要求,明确一贯的语法规范能极大的简化代码逻辑。(1)基本数据类型有bool、int、decimal、string、date、time,类可以做为数据类型定义(2)基本运算符有=、==、!=、>、>=、<、<=、!、+、-、*、/,其他运算符,比如取余额由函数库支持(3)关键字有private、public、event、class、void、new、return、break、continue、SELECT、FROM、UPDATE等(4)基本语句有if、for、while、switch,当然变量定义和赋值基本的语句类型(5)变量声明语法、赋值语法、函数声明和调用语法、事件定义语法截图说明
二、定义文法
要保证输入的代码符合语言规范的定义,第一步必须满足文法要求。
比如if语句的文法部分如下:
<ifSpecifier>:=
if ( <boolSpecifier> ) { <StatementSpecifier> }
$if ( ! <boolSpecifier> ) { <StatementSpecifier> }
$if ( <boolSpecifier> ) { <StatementSpecifier> } <esleSpecifier>
$if ( ! <boolSpecifier> ) { <StatementSpecifier> } <esleSpecifier>
<esleSpecifier>:=
else { <StatementSpecifier> }
$else if ( <boolSpecifier> ) { <StatementSpecifier> }
$else if ( ! <boolSpecifier> ) { <StatementSpecifier> }
$else if ( <boolSpecifier> ) { <StatementSpecifier> } <esleSpecifier>
$else if ( ! <boolSpecifier> ) { <StatementSpecifier> } <esleSpecifier>
三、词法分析:
遵循有限自动状态机的原则,一个个字符地读入。主要两个函数BeginConvert和ContinueConvert。BeginConvert是开始一个Token的读入,ContinueConvert是直到读到一个Token的结束。Token的结构设计影响后续语法和语义的逻辑写法。
读入下面的代码,产生下面的Token清单
四、语法分析
输入的代码是否满足基本的规范要求,则语法分析确定。设计环境启动时,解析得到拓广文法和项目规范族。
编译器用LR(1)算法,输入一个文件,不停的规约迭代,如果得到ACCEPT状态表示语法正确。
五、语义分析
语法正确并不表示输入的代码符合人的脑袋的思维,必须执行语义分析,也就是不停地写一大堆if else语句。重写编译器,这里是根本原因。
语义分析完全按照你设计的规范来写,没法详细说明。
六、重写开发环境
程序设计结构背后完全推翻了第一版本的设计,第一版本写的业务代码不能在第二版本中运行。
经过编译器后,代码的整个结构都很清楚了
上一篇:报表设计器