`
dato0123
  • 浏览: 971496 次
文章分类
社区版块
存档分类
最新评论

关于JavaScript词法

 
阅读更多

但凡语言,不论是自然语言还是程序语言,都大致可以区分词法和语法。所谓词,就是语言中有意义的最小单元。

常常听到一个笑话,说“我英语学的可好啦,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基本就是全部词法了,由它们之间的组合,可以组成表达式、语句、函数定义等语法结构,最终形成有强大表达能力的程序。

0
0
分享到:
评论

相关推荐

    javascript词法分析器

    JavaScript词法分析器是编程语言解析过程中的一个重要环节,它主要负责将源代码转换成一系列有意义的符号,为后续的语法分析和编译或解释提供基础。在这个过程中,词法分析器(也称为扫描器)会识别出源代码中的...

    JavaScript 深入学习【词法结构值类型和变量】

    以上只是JavaScript词法结构和值类型、变量的基础知识,更深入的学习还涉及到作用域、闭包、原型链、异步编程、Promise、async/await等高级主题。对于JavaScript的深入学习,理解这些概念并结合实际编程实践是非常...

    第16周-第24章节-Python3.5-JavaScript 词法分析解析.avi

    第16周-第24章节-Python3.5-JavaScript 词法分析解析.avi

    Javascript的词法作用域分析.pdf

    Javascript词法作用域分析 Javascript中的词法作用域分析是指变量的作用域不是在执行时决定的,而是在定义时决定的,也就是说通过静态分析就能确定。因此,词法作用域也叫做静态作用域。 在Javascript中,一个方法...

    网易JS面试题与Javascript词法作用域说明

    JavaScript中的词法作用域是编程中的一个重要概念,它决定了变量的可访问性和作用范围。根据题目描述,我们来深入理解这...在面试中,对词法作用域的深入理解可以帮助开发者解答关于变量查找、作用域链以及闭包等问题。

    xscan工具-到期时间7.1

    1. 使用html与javascript词法分析技术自动寻找反射XSS漏洞。 2. 自带爬虫(静态爬虫),只需要输入url就能自动寻找xss漏洞。 3. 支持对get、uri、header、cookie、post检测。 使用 - config.yaml 一般默认配置就行,...

    深入了解JavaScript词法作用域

    JavaScript的词法作用域是编程中的关键概念,它决定了变量的可见性和生命周期。在JavaScript中,作用域由函数定义的位置决定,而不是代码块(如if语句或for循环)的位置,这就是所谓的函数作用域。不同于其他一些...

    温习Javascript基础语法之词法结构_.docx

    JavaScript,作为一种广泛应用于Web开发的动态、弱类型的解释性编程语言,其基础语法中的词法结构是理解其工作原理的关键。JavaScript与Java虽然在名称上有相似之处,但实际上两者完全不同,JavaScript最初命名为...

    lexer:模仿flex的优雅的盔甲式JavaScript词法分析器。 易于扩展以适应您的完美需求

    模仿flex的优雅的盔甲式JavaScript词法分析器。 易于扩展,以适应您的完美需求。 安装 可以使用命令npm install lex通过将Lexer安装在上。 您也可以使用命令ringo-admin install aaditmshah/lexer将其安装在。 您...

    javascript 词法作用域和闭包分析说明

    在深入探讨JavaScript中的词法作用域与闭包之前,首先需要了解作用域的概念。作用域定义了变量访问的规则,决定了代码在何处以及如何查找变量。JavaScript中的词法作用域,也就是静态作用域,意味着变量的作用域在...

    JavaScript 解释器,包含词法分析、语法解析和执行。基于 LR 实现 eval.zip

    这个项目似乎是一个实现JavaScript解释器的课程设计,重点在于词法分析、语法解析和执行这三个关键步骤,这些是编译原理中的核心概念。这里我们将深入探讨这些知识点。 **词法分析(Lexical Analysis)**: 词法...

    深化理解javascript作用域其次篇之词法作用域和动态作用域_.docx

    深化理解javascript作用域其次篇之词法作用域和动态作用域_ 深化理解javascript作用域其次篇之词法作用域和动态作用域,是javascript中非常重要的一部分。理解词法作用域和动态作用域对javascript的编程至关重要。...

    C-Minus词法语法分析器(JavaScript实现)

    这是《编译原理》的课程设计--C-Minus词法语法分析器(带有课程设计报告),采用Web前端的JavaScript实现,兼容多种浏览器。词法分析器部分采用表驱动机制实现,同时提供一套用于快速验证性的正则匹配测试工具。语法...

    《你不知道的JavaScript》.pdf

    作者还特别指出了闭包这一强大的特性,它使得函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行的。 JavaScript的执行上下文也是书中重点讲解的内容之一。执行上下文是当前JavaScript代码被...

    编译原理-词法分析实验(javascript+html)实现编译原理可视化(含报告)

    编译原理-词法分析实验(javascript+html)实现编译原理可视化 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解。 本实验雷同可能性少,并且采用可视化展示的方法,很...

    javascriptAPI,javascript参考资料,javascript

    闭包则允许函数访问并操作其词法作用域内的变量,即使该作用域已经退出。 6. **原型和继承**:JavaScript 使用原型链实现继承,对象有一个内部属性 `__proto__` 指向它的构造函数的 prototype。ES6 引入了类和更...

    JavaScript内核系列 pdf

    闭包是JavaScript中一种强大的特性,允许函数访问并操作其词法作用域内的变量,即使该函数已经执行完毕。理解作用域规则,特别是块级作用域(let和const的引入)和函数作用域,以及如何利用闭包进行数据封装和状态...

    JavaScript的词法结构精华篇

    JavaScript的词法结构是编程语言的基础,它定义了代码的结构和规则,使得开发者能够按照规范书写有效的程序。本文将深入探讨JavaScript的几个关键词法元素。 首先,JavaScript的字符集基于Unicode,这意味着它可以...

    JavaScript词法作用域与调用对象深入理解

    JavaScript中的词法作用域和调用对象是理解其运行机制的关键概念。词法作用域指的是函数在其被定义时所在的作用域内运行,而非执行时。这意味着函数能够访问在其定义时可及的所有变量和函数,即使在它被调用时这些...

Global site tag (gtag.js) - Google Analytics