IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言子集编译器前端(一):文法设计 -> 正文阅读

[C++知识库]C语言子集编译器前端(一):文法设计

大三下编译原理课程大作业,选题:C语言子集编译器前端,由于时间有限和水平限制只做了一些简单功能。

1 功能

该编译器前端支持的语句有:表达式语句(算术表达式与逻辑表达式),while循环,if-else条件分支,变量定义与初始化语句以及多种语句组合成的符合语句。通过词法分析、语法分析、语义分析,最终生成四元式。本编译器前端只支持两种互相兼容的基本类型:int和char

2 文法设计

注意文法符号含义:int和char表示两种基本类型,integer和character表示两种类型的常量。

2.1 程序结构

  • 程序:程序由语句序列构成
    S -> statements

  • 语句:语句由条件语句、循环语句、复合语句、表达式语句构成
    statement -> selectionStatement
    statement -> whileStatement
    statement -> compoundStatement
    statement -> expressionStatement

  • 复合语句:符合语句由大括号包括,且变量的定义与初始化语句要在其他所有语句前面
    compoundStatement -> ‘{’ declaration statements ‘}’

  • 语句序列:添加M是为了在语义分析时可以正确的填next链
    statements -> statements M statement
    statements -> ‘#’

2.2 控制语句

语法分析部分采用自底向上的方案(SLR),而语义分析是用的SDT方案,在应用产生式规约的时候使用语义动作,所以对于嵌入产生式内部的动作需要添加空产生式进行执行。
由于表达式既可以用于赋值也可以用于流程控制。在流程控制时应当产生跳转语句,而其他时候不应当产生跳转语句,所以添加了文法符号T用于区别这两种情况。

  • 循环语句
    whileStatement -> ‘while’ M ‘(’ T ‘)’ M statement
  • 条件语句
    selectionStatement -> ‘if’ ‘(’ T ‘)’ M statement
    selectionStatement -> ‘if’ ‘(’ T ‘)’ M statement N ‘else’ M statement
  • 辅助语义分析的产生式
    M -> ‘#’
    N -> ‘#’
    T -> expression

2.3 变量定义与初始化

  • 类型说明:只能使用基本类型整型和字符型
    typeSpecifier -> ‘int’
    typeSpecifier -> ‘char’
  • 变量定义语句
    declaration -> typeSpecifier initDeclarator ‘;’ declaration
    declaration -> typeSpecifier ‘;’
    declaration -> ‘#’
  • 初始化语句:用第一条则不赋初值,用第二天则对变量赋初值
    initDeclarator -> ID
    initDeclarator -> ID ‘=’ assignmentExp

2.4 表达式语句

表达式文法的产生式按运算符优先级排列,优先级越高距离基本因式越近,每个因式的具体构成(左递归还是右递归)取决于运算符的结合性。

  • 表达式语句,即表达式后加冒号。
    expressionStatement -> expression ‘;’
    expressionStatement -> ‘;’
  • 逗号表达式,连接多个表达式。这里在语义分析时要注意,形如int a=(3+3,4+4);的语句,取最右侧的值赋给a。
    expression -> assignmentExp
    expression -> expression ‘,’ assignmentExp
  • 赋值表达式
    assignmentExp -> logicalOrExp
    assignmentExp -> ID ‘=’ logicalOrExp
  • 逻辑或因式
    logicalOrExp -> logicalAndExp
    logicalOrExp -> logicalOrExp ‘||’ M logicalAndExp
  • 逻辑与因式
    logicalAndExp -> equalityExp
    logicalAndExp -> logicalAndExp ‘&&’ M equalityExp
  • 比较因式(相等与不等)
    equalityExp -> relationalExp
    equalityExp -> equalityExp ‘==’ relationalExp
    equalityExp -> equalityExp ‘!=’ relationalExp
  • 比较因式(大于、小于、大于等于、小于等于)
    relationalExp -> additiveExp
    relationalExp -> relationalExp ‘<’ additiveExp
    relationalExp -> relationalExp ‘<=’ additiveExp
    relationalExp -> relationalExp ‘>’ additiveExp
    relationalExp -> relationalExp ‘>=’ additiveExp
  • 加减因式
    additiveExp -> multiplicativeExp
    additiveExp -> additiveExp ‘+’ multiplicativeExp
    additiveExp -> additiveExp ‘-’ multiplicativeExp
  • 乘除因式
    multiplicativeExp -> unaryExp
    multiplicativeExp -> multiplicativeExp ‘*’ unaryExp
    multiplicativeExp -> multiplicativeExp ‘/’ unaryExp
  • 单目因式(单目减与单目加)
    unaryExp -> primaryExp
    unaryExp -> ‘-’ primaryExp
    unaryExp -> ‘+’ primaryExp
  • 基本因式(常量、标识符或括号内的表达式)
    primaryExp -> ID
    primaryExp -> constant
    primaryExp -> ‘(’ expression ‘)’
  • 常量定义
    constant -> integer
    constant -> character
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 17:54:42  更:2022-06-25 17:56:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 12:36:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码