L语言编译器的设计与实现之设计篇

本文介绍了L语言编译器的设计与实现,涵盖词法分析、语法/语义分析及目标代码生成。任务包括实现单词分割、语法结构分析并生成中间代码。L语言的定义、源程序书写格式和数据结构也被详细阐述。词法分析处理非法字符和错误单词,语法分析则产生四元式序列。最后,目标代码生成将中间代码翻译为8086汇编语言。
摘要由CSDN通过智能技术生成

L语言编译器的设计与实现之设计篇

1、任务:实现一个简单的编译程序,能够对指定程序设计语言进行编译。

编译器组成成分

    1.扫描器

    该扫描器是一个子程序,其输入是源程序字符串,每调用一次输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设程序设计语言中,基本字不能用作一般标识符,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

    2.语法分析器

    以算法优先分析方法为例,设计一个算符优先语法分析程序。算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。当然,也可采用预测分析等方法设计语法分析器,具体方法自定。

    3.语法制导翻译程序

    采用语法制导翻译方法,实现算术表达式、赋值语句和基本控制语句等的翻译。本语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列。

    4.目标代码生成器

    将程序设计语言的中间代码程序翻译为目标代码程序,其输入是四元式序列,输出是一个汇编代码文件。

 

    每个环节可作为一个独立的实践课题,分别编程调试,然后再连接在一起总调,从而实现一个完整的编译器。

2、L语言定义

  程序定义:

    〈程序〉→ program〈标识符〉〈程序体〉.

    〈程序体〉→〈变量说明〉〈复合句〉

  变量定义:

    〈变量说明〉→ var〈变量定义〉|ε

    〈变量定义〉→〈标识符表〉:〈类型〉;|〈标识符表〉:〈类型〉;〈变量定义〉

    〈标识符表〉→〈标识符〉,〈标识符表〉|〈标识符〉

  语句定义:

    〈复合句〉→ begin〈语句表〉end

    〈语句表〉→〈执行句〉;〈语句表〉|〈执行句〉   (执行句:while  , If  ,赋值语句)

    〈执行句〉→〈简单句〉|〈结构句〉

    〈简单句〉→〈赋值句〉

    〈赋值句〉→〈变量〉:=〈表达式〉

    〈变量〉→〈标识符〉

    〈结构句〉→〈复合句〉|〈if句〉|〈WHILE句〉

    〈if句〉→ if〈布尔表达式〉then〈执行句〉| if〈布尔表达式〉then〈执行句〉else〈执行句〉

    〈while句〉→ while〈布尔表达式〉do〈执行句〉

  表达式定义:

    〈表达式〉→〈算术表达式〉|〈布尔表达式〉

    〈算术表达式〉→〈项〉+〈算术表达式〉|〈项〉-〈算术表达式〉|〈项〉

    〈项〉→〈项〉*〈因子〉|〈项〉/〈因子〉|〈因子〉

    〈因子〉→〈算术量〉

    〈算术量〉→〈标识符〉|〈整数〉|〈实数〉

    〈布尔表达式〉〈布尔项〉or〈布尔表达式〉|〈布尔项〉

    〈布尔项〉〈布尔因子〉and〈布尔项〉|〈布尔因子〉

    〈布尔因子〉→ not〈布尔因子〉|〈布尔量〉

    〈布尔量〉〈布尔常数〉|〈标识符〉|(〈布尔表达式〉)|〈关系表达式〉

    〈关系表达式〉〈标识符〉〈关系运算符〉〈标识符〉

    〈关系运算符〉|〈= ||〉=||〈〉

  类型定义:

    〈类型名〉→ integer|bool | real

  单词定义:

    〈标识符〉→〈字母〉|〈标识符〉〈字母〉|〈标识符〉〈数字〉

    〈整数〉→〈数字〉|〈整数〉〈数字〉

    〈实数〉→〈整数〉.|〈实数〉〈数字〉

    〈布尔常数〉→ true|false

  字符定义:

    〈字母〉→  A│B│C│D│E│F│G│H│I│J│K│L│M│N│O│P│Q│R│S│T│

    U│V│W│X│Y│Z│a│b│c│d│e│f│g│h│i│j│k│l│m│n│o│

    p│q│r│s│t│u│v│w│x│y│z

    〈数字〉→  0│1│2│3│4│5│6│7│8│9

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值