问题 3100 --好学的小明

3100: 好学的小明★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 3  解决: 1
[提交][状态][命题人:]

题目描述

小明喜欢学习计算机知识,在他学完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 根据具体的值情况而定

输入

SB++语言程序代码

代码保证符合定义规范 不会出现未提到的关键字

输出

单词及其类型序列对 中间用空格隔开
样例输入
Copy
def a {12, "sss"}
样例输出
Copy
def KEYVALUE_DEF
a IDENTIFIER
{12, "sss"} VALUE_AGGREATE

提示

来源

 

[提交][状态]