小明喜欢学习计算机知识,在他学完C++课程之后,又对C++程序是如何运行起来的十分好奇,直到他学完了《编译原理》。。。。。。。。
小明想动手设计一种自己的语言SB++,于是他开始实现自己的编译器,他设计的语言十分简单,有以下几个规则:
1: SB++语言只有以下几个关键字 def if else end
2: SB++语言有int, float, string 数据类型或者聚合类型{1, “2”}, {{1, 2}, 1}等,且只有以下两种定义方式
def a //定义a
def a 12 //定义a = 12
3:if语句使用如下:
if condition
do something or nothing
else
do something or nothing
end
4: if 后面的条件是一个identifier,比如之前已经def a,此时if a,则将进入分支语句
5: if 语句以end结束,else可有可无
6:int类型定义为10进制8进制16进制数字,其中八进制数字以0开头,16进制以0x或0X开头
7:string类型以“”包含
8:float数字类型有小数点或是科学计数法表示或末尾有f或F,如1,2 1f 1F 1e-13等形式
9: SB++变量名符合c++变量名定义规则
下面展示几段完整的代码
def a 12
def b
if a
def c 12
end
def a
if b
def c 12
else
def d 14
def f {{15, 15}, {11, 11}}
end
在设计好语言之后,第一步词法分析就难倒小明
词法分析就是讲程序序列转化为单词的过程
在这个语言中, int if else ebd 聚合整体 变量值整体 变量名都是一个单词
词法分析要做对的就是将每个单词和其所对应的词性进行匹配
有以下对应关系
def ------- KEYVALUE_DEF
if ------- KEYVALUE_IF
else ------ KEYVALUE_ELSE
end ------ KEYVALUE_END
变量名--- IDENTIFIER
变量值--- VALUE_INT VALUE_STRING VALUE_FLOAT VALUE_AGGREATE 根据具体的值情况而定