但凡语言,不论是自然语言还是程序语言,都大致可以区分词法和语法。所谓词,就是语言中有意义的最小单元。
常常听到一个笑话,说“我英语学的可好啦,26个字母全认识!”。大家都知道,一切英文都是由26个字母组成的,为啥26个字母全认识,还不能说会英文呢?
答案就是字母不是词,单独的字母是没有意义的,只有字母组成了词,才会有表达意义的能力。所以学英语的时候,最重要的是"背单词"。
别人问你,h是什么意思啊?——h没有任何意思,只有它出现在help,hello这样的词里面,h才有意义。
对计算机语言来说,同样的道理,每个Unicode或者ASCII字符都是没有意义的,只有它们形成了"词",才有意义。
所以对任何一门计算机语言来说,最基本的规则就是词法,JavaScript里面,所谓的"词",实际上大家早已非常熟悉了,比如:
if while else for function之类的关键字
Cat Dog play等用户定义的变量名,正式的叫法是标识符
"abc" 13.5 /abc/g true false等表示变量值的直接量
圆括号 方括号 花括号 加号 等符号
回车等换行符
空格、Tab等空白符
注释
经过很多年的发展,计算机语言的词法定义基本形成了一个通用的套路。一般来讲,一切合法的“词”,被统称作“输入元素(InputElement)”。
输入元素中,一切有意义的词被称作"token"(这个词到目前为止没有被广泛接受的翻译方法,所以保留),在一般的认识中,token以外的InputElement被扫描出来之后就可以直接丢弃了(当然实际情况是对大部分语言来说都是不行的,JavaScript也不行。)所以词法分析程序,大部分叫做lexer,也有人喜欢叫做tokenizer。
除了真正有意义的token之外,其它InputElement都是起到修饰或者增加源代码可读性的作用。在JS中,就只有以下三种:
WhiteSpace:空白符
LineTerminator:行终结符
Comments:注释
这三种都很好理解,是大家平时非常常用的东西。
大部分编程语言的词法区别都体现在token上,JS的token其实也只有八种:
英文名
名称
简述
示例
Token |
词法标记 |
一切JS中有实际意义的词法标记 |
|
┣IdentifierName |
标识名称 |
以字母或_或$开始的一个单词,可以用于属性名 |
abc |
┃┣Identifier |
标识符 |
非保留字的IdentifierName,可以用于变量名或者属性名 |
abc
|
┃┣Keyword |
关键字 |
有特殊语法意义的IdentifierName |
while
|
┃┣NullLiteral |
Null直接量 |
表示一个Null类型的值 |
null
|
┃┗BooleanLiteral |
布尔直接量 |
表示一个Boolean类型的值 |
true
|
┣Punctuator |
标点符号 |
表示特殊意义的标点符号 |
*
|
┣NumericLiteral |
数字直接量 |
表示一个Number类型的值 |
.12e-10
|
┣StringLiteral |
字符串直接量 |
表示一个String类型的值 |
"Hello world!"
|
┗RegularExpressionLiteral |
正则表达式直接量 |
表示一个RegularExpression类的对象 |
/[a-z]+$$/g
|
这些token基本就是全部词法了,由它们之间的组合,可以组成表达式、语句、函数定义等语法结构,最终形成有强大表达能力的程序。
分享到:
相关推荐
挺不错的资源,简单明了,对于理解编译原理也有一定作用
JavaScript 深入学习【词法结构值类型和变量】
第16周-第24章节-Python3.5-JavaScript 词法分析解析.avi
Javascript的词法作用域分析.pdf
主要介绍了JavaScript词法作用域的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
模仿flex的优雅的盔甲式JavaScript词法分析器。 易于扩展,以适应您的完美需求。 安装 可以使用命令npm install lex通过将Lexer安装在上。 您也可以使用命令ringo-admin install aaditmshah/lexer将其安装在。 您...
温习Javascript基础语法之词法结构_.docx
关于 Javascript 的函数作用域、调用对象和闭包之间的关系很微妙,关于它们的文章已经有很多,但不知道为什么很多新手都难以理解。我就尝试用比较通俗的语言来表达我自己的理解吧。 作用域 Scope Javascript 中的...
这是《编译原理》的课程设计--C-Minus词法语法分析器(带有课程设计报告),采用Web前端的JavaScript实现,兼容多种浏览器。词法分析器部分采用表驱动机制实现,同时提供一套用于快速验证性的正则匹配测试工具。语法...
编译原理-词法分析实验(javascript+html)实现编译原理可视化 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解。 本实验雷同可能性少,并且采用可视化展示的方法,很...
Javascript函数在定义它们的作用域里运行,而不是在执行它们的作用域里运行。
今天小编就为大家分享一篇关于JavaScript的词法结构精华篇,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
以下上是我在学习和使用了JS一段时间后,为了更深入的了解它, 也为了更好的把握对它的应用, 从而在对闭包的学习过程中,自己对于词法作用域的一些理解和总结
关于javascript有这样一个说法,java和javascript的关系是雷锋和雷锋塔的关系。那到底有没有关系呢 javascript最开始的名字是LiveScript,后来选择javascript作为其正式名称的原因,大概是
主要介绍了JavaScript词法作用域与作用域链,结合实例形式分析了JavaScript词法作用域与作用域链相关概念、原理与操作注意事项,需要的朋友可以参考下
深化理解javascript作用域其次篇之词法作用域和动态作用域_.docx
ECMAScript (JavaScript) 实现 作为编码挑战,在晚上和周末,我一直在实现 ECMAScript 语言规范的词法分析器、解析器和运行时。 我选择 Python 作为语言,以便我可以使用出色的实现。 我的目标不是 100% 完成,...
本节用很短的篇幅来介绍javascript的词法结构。 1.字符集 javascript程序是用Unicode字符集编写的,Unicode是ASCII和Latin-1的超集,并支持地区上几乎所有的语言。ECMAscript3要求javascript的实现必须支持Unicode2,...