词法分析_1

作者: Moid莫 | 来源:发表于2019-06-04 14:06 被阅读19次

在实现词法分析器前,我们先了解一下。什么是字符串、数字、标识符、关键字、运算符、逻辑符等

s test = 2+3*4+"moid"
f(test!=null)
{
testcall(2333)
}

上面伪代码中的s、f、null为关键字(保留字、keyword),test、testcall是标识符(identifier),2、3、4、2333都是数字(number),+、*是运算符(operator),!=为逻辑符,"moid"是字符串(string),其它的{、}、(、)统一为辅助符号

词法分析器要做的事就是从源代码分析出相应的关键字、标识符、字符串然后成一个hash/array列表。下面看个示例

s test = 2+3*4

通过上面示例来说,通过词法分析器分析代码可能会生成类似这样的结构:

{"KEYWORD","s",1}
{"SPACE"," ",1}
{"IDENTIFIER","test",1}
{"SPACE"," ",1}
{"ASSIGN","=",1}
{"SPACE"," ",1}
{"NUMBER",2,1}
{"PLUS","+",1}
{"NUMBER",3,1}
{"MULTIPLY","+",1}
{"NUMBER",4,1}

这种结构类似lua的table/hash/array

{"KEYWORD","s",1},里面有三个元素。

第一个元素:表示类型(就是上面说的标识符、关键字、数字、运算符等)并以大写表示,KEYWORD的小写是keyword。keyword就是表示关键字。

第二个元素:表示具体值(s是属于关键字,所以它的具体值是s。具体值是从源码分析而来的)

第三个元素:表示当前类型值(s)在第几行

剩下的
{"SPACE"," ",1}
{"IDENTIFIER","test",1}
{"SPACE"," ",1}
{"ASSIGN","=",1}
{"SPACE"," ",1}
{"NUMBER",2,1}
{"PLUS","+",1}
{"NUMBER",3,1}
{"MULTIPLY","+",1}
{"NUMBER",4,1}

意思都一样的,NUMBER表示数字、IDENTIFIER表示标识符、SPACE表示空格、PLUS表示+(符号)、MULTIPLY表示*符号

接下来词法分析第二章会用lua来实现词法分析器的,顺便讲解一下词法分析中的状态机

相关文章

  • 三. Flex进阶:需要了解的一些知识

    参考:词法分析器生成工具flex词法分析器总结--flex&bison词法分析生成器flex的选项 1. Flex...

  • 词法分析_1

    在实现词法分析器前,我们先了解一下。什么是字符串、数字、标识符、关键字、运算符、逻辑符等 上面伪代码中的s、f、n...

  • 基于JAVA实现的基于DFA的词法分析程序

    1 实验目的 根据自己确定的正规表达式,编写、调试一个词法分析程序,对语句进行词法分析,从而更好理解词法分析原理。...

  • Javascript 语法解析

    执行过程 词法分析 -> 语法分析 -> 预编译 -> 解释执行 一. 词法分析 核心:词法分析是将字符流(cha...

  • 编译原理三——语义分析

    语义分析和中间代码生成 1、概述 1、和语法分析、词法分析的同时进行进行词法检查、语法检查一样,语义分析也伴随语义...

  • 一个编译器最简前端的python实现

    一个编译器的前端通常包括词法分析器和语法分析器。在分析过程中,文本输入词法分析器,根据词法规则解析出词法单元。词法...

  • PL/0简单编译系统(二)

    词法分析 词法分析又称词法分析器或者扫描器,是编译程序的基本子程序之一。本项目采用手工方式设计并实现词法分析程序。...

  • 程序设计语言|高级语言源程序的编译过程

    高级语言源程序的编译过程通常分为:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。 1.词法分...

  • 编译原理笔记

    源程序分析: 词法分析 :线性分析 被称为词法分析 或者扫描比如:position=init+rate * 60 ...

  • 编译原理基础知识汇总

    前端: 词法分析 -> 语法分析 -> 语义分析后端: 生成中间代码 -> 优化 -> 生产目标代码 词法分析:有...

网友评论

    本文标题:词法分析_1

    本文链接:https://www.haomeiwen.com/subject/kablxctx.html