

词法分析中的token
source link: https://www.clloz.com/programming/compilers/2019/04/07/lexical-analysis-token/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

文章目录
前言
JS的正则表达式有两种声明方法,一种是构造函数 var reg = new RegExp(pattern, flag);
,另一种是字面量 var reg = / pattern / flag
,其中字面量表示法是用斜杠来分割正则表达式。
在JS中斜杠 /
表示除法,正则表达式,反斜杠 \
一般用来转义, Linux
中斜杠 /
是路径分隔符, Windows
中反斜杠 \
是路径分隔符,要区分正斜杠和反斜杠只要记住正斜杠是撇,反斜杠是捺就行了。不过我很好奇字面量表示法表示正则表达式的时候,JS引擎是如何分析这个字面量的,斜杠有可能是除法、正则或者单纯就是一个字符,虽然是编译原理的知识,不过我还是去了解一下词法分析中的token。
词法分析
词法分析是编译过程的第一步工作,将字符流转换为单词序列,输出到中间文件中,这个中间文件将会作为语法分析程序的输入,进行下一步工作。
我们写的程序在形式上也只是有限个字符的排列,不同的语言对于排列的规则都有不同的约束,就是为了让词法分析器能够按照这个规则来对我们所写的源代码进行分析,分析的第一步就是词法分析,将字符流转换为编程语言中不可再分的单词序列,识别输入文件中的关键字、分隔符、标识符、数字、运算符、注释等。大小写不敏感,字母为a~z, A~Z,数字为0~9。
token
token中文好像分析为标记,是一个字符串,也是构成源代码的最小单位,从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。编译器会从左到右扫描我们的源代码,将其中的字符流分割成一个一个的token。
token类别
Token Key Token Value Space 空格 Separator 分隔符( ;,{,},(,) ) single-ch operator 单字符运算符( =,+,-,*,/,%,;,|, :,!) two-ch operator 双字符运算符(:=,!=,==) num 数字 less equal <= NE <> less than < greater equal >= greater than > reserved word 保留字 identifier 标识符 string 字符串 comment 注释(单行、多行) error 一些错误情况,例如数字开头的字符串 other 其他符号(换行、制表等)标记化
比如 sum = 3 + 2;
经过标记化后会得到
标记经常使用正则表达式进行定义,语法分析器读取输入字符流、从中识别出语素、最后生成不同类型的标记。其间一旦发现无效标记,便会报错。
总结
对编译原理一窍不通,只是在写代码的过程中经常好奇编译器或者解释器是如何理解这些字符的,好奇心也经常害自己钻进牛角尖,特别是在知识储备严重不足的情况下,不过好奇心也是学习知识的动力,能够分析出当前哪些问题是以自己目前的能力能够理解和解决的尤为重要,把精力花在当前的能力无法触及的领域会浪费大量时间。本文只是自己搜索的一些资料的总结,可能理解有很多错误之处。
Recommend
-
35
一直对词法分析与解析的话题比较感兴趣,最近发现了好几篇相关的优秀文章,准备好好翻译和研究下。我的理解,词法分析与解析的应用还是比较广泛的,无论简单的配置文件、各种模板语言、还是我们每天在写编程语言都离不开它。 本篇...
-
31
本文是关于词法器实现的具体介绍,如果在阅读时遇到困难,建议参考源码阅读,文中的代码片段为了介绍思路。如何解析会在下一篇介绍。 最近简单看了下 Go 源码,在 src/go 目录下有几个模块,token、scanner 和 parser 应该就是 Go...
-
26
最近发现我的翻译是越来越随性了,刚开始文章翻译的时候比较拘束,现在更多强调可读性,比如有些对文章大意没有什么影响的文字我现在都会选择直接跳过。 这篇文章主要是关于 INI 解释器的 parser 实现,它会从上一节中 Lexer 中接...
-
42
之前的 Go 笔记系列,已经完成到了开发环境搭建,原本接下来的计划就是到语法部分了,但后来一直没有前进。主要是因为当时的工作比较忙,分散了精力,于是就暂时放下了。 最近,准备重新把之前计划捡起来。 第一步,肯定是...
-
38
从词法分析角度看 Go 代码的组成 ...
-
8
C语言编译器...
-
8
ucc编译器(词法分析)
-
10
连载《Chrome V8 原理讲解》第四篇 V8词法分析源码讲解,Token字生成灰豆chrome v8连载,3~4天一篇,持续更新中...
-
2
Go编译原理系列3(词法分析)在上一篇文章中,介绍了词法分析中的核心技术,有穷自动机(DFA),以及两个常见的词法分析器的使用及工作原理。在这个基础上去看Go的词法分析源码会轻松许多
-
5
本科阶段一直没学过编译原理,因此找到一门UCB的课程CS164——Programming Language&Compilers来学习一下编译原理的基本内容。第一节主要讲的是整个课程的Introduction和词法分析。 Introduction 我们平时常用...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK