博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[源码和文档分享]基于LR分析法的简单分析法
阅读量:5076 次
发布时间:2019-06-12

本文共 1000 字,大约阅读时间需要 3 分钟。

一、课程设计目的

通过设计、编制、调试一个简单计算器程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。

二、课程设计内容及步骤

本次课程设计需要使用 LR 分析法完成简单计算器的设计,其中算术表达式的文法如下:

  • 〈无符号整数〉∷= 〈数字〉{〈数字〉}
  • 〈标志符〉∷= 〈字母〉{〈字母〉|〈数字〉}
  • 〈表达式〉∷=[+|-]〈项〉{〈加法运算符〉〈项〉}
  • 〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉}
  • 〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’
  • 〈加法运算符〉∷= +|-
  • 〈乘法运算符〉∷= * |/

本次课程设计分为如下步骤完成:

  1. 根据题目要求的文法写出产生式
  2. 进行文法拓广,根据产生式画出识别活前缀的 DFA
  3. 根据 DFA 写出 LR(0)或 SLR(1)分析表
  4. 编写程序,对输入串进行分析
  5. 设计若干用例,上机测试并通过所设计的分析程序

三、翻译方法

3.1 词法分析

词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。进行语法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称 Lexer),也叫扫描器(Scanner)。

词法分析器一般以函数的形式存在,供语法分析器调用。词法分析是编译过程中的第一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。简化设计、改进编译效率、增加编译系统的可移植性。词法分析是编制一个读单词的过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。单词的分类主要分为五类:

  • 关键字:由程序语言定义的具有固定意义的标识符,也称为保留字或基本字
  • 标识符:用来表示程序中各种名字的字符串
  • 常 数:常数的类型一般有整型、实型、布尔型、文字型
  • 运算符:如+、-、*、/等
  • 界限符:如逗号、分号、括号等

这里将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词时,则调用该子程序。词法分析程序每调用一次,便从源程序文件中读入一些字符,直到识别出一个单词。

参考文档和完整的文档和源码下载地址:

 

转载于:https://www.cnblogs.com/ddgg5151/p/10091514.html

你可能感兴趣的文章
Angular双向数据绑定
查看>>
几个好玩的在线编程网站
查看>>
理清apply(),call()的区别和关系
查看>>
架构实战项目心得(八):dubbo知识的整理
查看>>
mysql中使用rand函数得到随机整数
查看>>
测试马克飞象支持度~
查看>>
windows下新安装的mysql修改root password问题
查看>>
添加 vip
查看>>
MVC DropDownList
查看>>
java基础 小知识点汇总篇
查看>>
GotoAndPlay
查看>>
[SHOI2016]黑暗前的幻想乡
查看>>
妖梦斩木棒
查看>>
电影推荐之《指环王:护戒使者》 隐私策略(Privacy policy)
查看>>
Windows10下配置Python2和Python3共存 并用anaconda实现方便的包管理
查看>>
【Linux学习】Linux文件系统5—查看文件内容命令
查看>>
二叉树的遍历 分类: 数据结构 2015-07...
查看>>
LeetCode_Binary Tree Zigzag Level Order Traversal
查看>>
MySQL数据表类型
查看>>
Modelsim的使用——复杂的仿真
查看>>