
编译原理-词法分析
单词符号 (Token):对应具体意义的词法单元类型,如标识符、整数等。 属性值 (Attribute):记录单词的相关属性值,如标识符的名称、常量的值等。 无符号整数: 标识符: 保留字: 运算符: 界符: 《计算机编程语言--语法与词法分析》 《编程语言技术》
发布日期:2021-05-20 04:47:44
浏览次数:12
分类:精选文章
本文共 4589 字,大约阅读时间需要 15 分钟。
词法分析实验——Decaf语言的语法解析
词法分析的核心任务
词法分析是编程语言解析的第一步,主要通过从左到右读取源程序的字符流,识别出有意义的词法单元。这些词法单元包括保留字、标识符、常量、运算符、界符等。在识别出每个单词的同时,词法分析程序还需要验证词法的正确性。
识别出的词法单元会被记录为单词记录,该记录通常包含两个部分信息:
在大多数编程语言中,词法单元的类别可以归纳为以下几类:
- 保留字:如
if
、while
、struct
等,这些是编程语言的关键操作符。 - 标识符:用于表示变量名、函数名、常量名等,如
variableName
、constantName
、functionName
等。 - 常量:如整数
25
、浮点数3.1415
、字符串常量"ABC"
等。 - 运算符:如
+
、-
、*
、/
、=
等。 - 界符:如逗号
","
、分号";"
、括号()
等。
某些编程语言的构词规则如下:
<数字> ::= <数字> { <数字> }
<标识符> ::= <字母> { <字母> | <数字> }
<保留字> ::= const | var | procedure | begin | end | odd | if | then | call | while | do | read | write
<运算符> ::= + | - | * | / | = | # | < | <= | > | >= | :=
<界符> ::= ( | ) | , | ; | { | }
实验内容
对于给定的Decaf程序片段:
class Main { static void main() { Print("hello world"); }}
设计一个词法分析器,实现上述语法规则。词法分析结果如下:
保留字 class分隔符 { 分隔符 } 保留字 static分隔符 void 分隔符 main 分隔符 ( 分隔符 )分隔符 { 分隔符 } 分隔符 static分隔符 void 分隔符 main 分隔符 (分隔符 )分隔符 Print 分隔符 ( 分隔符 "hello world" 分隔符 )分隔符 ;
代码实现
#include#include #include #include #include #include
##-reference如果想要了解更多关于词法分析的实现细节,可以参考以下资料:
词法分析是语言解析的基础,理解其原理对于编写高效且灵活的解析器至关重要。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月07日 15时25分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP是世界上最好的语言?Phython第一个不服
2019-03-15
Bugku CTF-web6
2019-03-15
Bugku CTF-web10 头等舱
2019-03-15
UML-配置图
2019-03-15
JS高级面向对象(二)-构造函数和原型
2019-03-15
python入门到秃顶(10):异常
2019-03-15
ES6_变量生明
2019-03-15
考研复试英语问答
2019-03-15
百度背景换肤案例
2019-03-15
修改ng-zorro中table对齐及宽度等细节
2019-03-15
输出对象的值——踩坑
2019-03-15
angular2项目里使用排他思想
2019-03-15
折线图上放面积并隐藏XY轴的线
2019-03-15
zabbix之自动发现
2019-03-15
Experience of tecent interview
2019-03-15
failed to push some refs to git
2019-03-15
在苹果Mac上如何更改AirDrop名称?
2019-03-15
1110 Complete Binary Tree (25 point(s))
2019-03-15
541【毕设课设】基于单片机电阻电感电容RLC测量仪系统
2019-03-15
568【毕设课设】基于单片机多路温度采集显示报警控制系统设计
2019-03-15