一、语言按照语法分类

1、非形式语言:中文 英文

2、形式语言:乔姆斯基谱系(四种文法 上下文包含文法)

  • 0型 无限制文法
  • 1型 上下文相关文法
  • 2型 上下文无关文法
  • 正则文法

二 产生式(BNF)

巴科斯诺尔范式:即巴科斯范式(英语:Backus Normal Form,缩写为 BNF)是一种用于表示上下文无关文法(2型)的语言,上下文无关文法描述了一类形式语言。它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)首先引入的用来描述计算机语言语法的符号集。
产生式: 在计算机中指 Tiger 编译器将源程序经过词法分析(Lexical Analysis)和语法分析(Syntax Analysis)后得到的一系列符合文法规则(Backus-Naur Form,BNF)的语句

  • 用尖括号括起来的名称来表示语法结构名

  • 语法结构分成基础机构和需要用其他语法结构定义的复合结构

    • 基础结构终结符
    • 复合结构非终结符
  • 引号和中间的字符表示终结符
  • 可以有括号

  • *表示重复多次

  • | 表示或

  • +表示至少一次

终结符:

  • Number
  • + - * /

非终结符

  • MultiplicativeExpression
  • AdditiveExpression

BNF 表示的四则运算 加减 乘除

定义一个数字

<Number> = "0" | "1" | "2" .....| "9"

定义一个十进制数
<DecimalNumber> = "0" | (("1" | "2" .....| "9") <Number>* )

加法

<AdditiveExpression> ::= <DecimalNumber> + <DecimalNumber>

<MultiplicativeExpression> :: = <DecimalNumber> | <MultiplicativeExpression> "*" <DecimalNumber> | <MultiplicativeExpression> / <DecimalNumber>

<AdditiveExpression> ::= <MultiplicativeExpression> | <AdditiveExpression> "+" <MultiplicativeExpression> | <AdditiveExpression> "/" <MultiplicativeExpression>

BNF 带括号的四则运算

括号
<PrimaryExpression> = <DecimalNumber> |  "(" <LogicalExpress> ")"

+ -
<AdditiveExpression> = <PrimaryExpression> | <AdditiveExpression> "+" <PrimaryExpression> | <AdditiveExpression> "-" <PrimaryExpression>

* /
<MultiplicativeExpression> = <DecimalNumber> | <MultiplicativeExpression> "*" <DecimalNumber> |<MultiplicativeExpression> "/" <DecimalNumber>

四则表达式
<LogicalExpress> = <DecimalNumber> | <LogicalExpress> "||" <AdditiveExpression> |  <LogicalExpress> "&&" <AdditiveExpression>

产生式: 在计算机中指 Tiger 编译器将源程序经过词法分析(Lexical Analysis)和语法分析(Syntax Analysis)后得到的一系列符合文法规则(Backus-Naur Form,BNF)的语句

通过产生式理解乔姆斯基谱系

  • 0型无限制文法

    • ?:: =? <a> <b> ::= "c" <d>
  • 1型上下文相关法 VB JavaScript Python
    • ?<A> ?::=? <B> ? <a> <b> <c> ::= <a> "c" <b> 只有中间那个可以变

"'''四则运算\n" <LogicalExpress> "'''" = "'''四则运算" ( <LogicalExpress> = <DecimalNumber> | <LogicalExpress> "||" <AdditiveExpression> | <LogicalExpress> "&&" <AdditiveExpression>) "'''"

  • 2型上下文无关法

    • <A>::=?
  • 3型正则文法(表达式)
    • <A>::=<A>?
    • <A>::=?<A> 不正确

JavaScript 总体上属于上下文无关文法 表达式大部分属于正则文法,有两个特例 **(乘方) 是右结合 不属于正则  属于2型

{
get a{ return1},
get:1
}
属于1型文法

三、现代语言的特例

  • C++中,*可能表示乘号或者指针,具体是哪个,取决星号前面的标示符是否被声明为类型
  • VB中,<可能是小于号,也可能是XML直接量的开始,取决于当前位置是否可以接受XML直接量
  • Python中,行首的Tab符和空格会根据上一行的行首空白以一定的规则被处理成虚拟终结符indent或者dedent
  • JavaScript中,/可能是除号,也可能是正则表达式的开头,除理方式类似于VB,字符串模板中也需要特殊处理},还有自动插入分号

四、编程语言的分类

  • 形式语言-用途

    • 数据描述语言 JSON 、HTML、XAML、SQL、CSS
    • 编程语言: C++、C、Java、C#、Python、Ruby、Perl、Lisp、T-SQL、Clojure、Haskel、JavaScript
  • 形式语言-表达方式
  1. 声明式语言 JSON 、HTML、XAML、SQL、CSS 、Lisp、Clojure、Haskel
  2. 命令型语言: C++、C、Java、C#、Python、Ruby、Perl、T-SQL、JavaScript

五、编程语言的性质

图灵完备性

    • 命令式 -图灵机

      • goto
      • if和while
    • 声明式 -lambda
    • 递归

动态与静态

    • 动态:

      • 在用户的设备/在线上服务器上
      • 产品运行时
      • Runtime
    • 静态

      • 在程序员的设备上
      • 产品开发时
      • Compiletime

类型系统

    • 动态类型系统与静态类型系统

      • 动态类型系统(JavaScript)
      • 静态类型系统 C++
    • 强类型与弱类型
      • String + Number
      • String == Boolean
    • 复合类型
      • 结构体{ a:t1,b:t2}
      • 函数签名 参数类型(列表)和返回值类型 (T1,T2)=>T3
    • 子类型
  • 泛型 逆变与协变

      • 凡是能用Array<Parent> 的地方都能用Array<Child> (协变)
      • 凡是能用Funtion<Child> 的地方都能用Funtion<Parent> (逆变)

一般命令式编程语言的设计方式

Atom(原子级) 最小的组成单位 通常包含关键字 直接量 变量名一些基本的单位称为原子

  • Indetifier 变量名
  • Literal 直接量 数字直接量和字符串直接量

Expression(表达式) 原子级的结构通过运算符相连接,加上一些辅助的符号,构成表达式,通常是一个可以级联的结构

  • Atom 原子
  • Operator 运算符 (javascript为例)
    • 算数运算符 + - * / % ++ --
    • 赋值运算符 = += -+ *= /= %=
    • 比较运算符 == === != !== > < >= <= ?
    • 逻辑运算符 && || !
    • 类型运算符 typeof(返回变量的类型) instanceof(返回 true,如果对象是对象类型的实例。)
    • 位运算符 & | ~(非) ^(异或) <<(零填充左位移) >>(有符号右位移) >>> (零填充右位移)
  • Punctuator 特定的符号

Statement语句 if while for 语句

  • Expression
  • Keyworld
  • Punctuator

Structure结构化

  • Function
  • Class
  • Process 线程
  • Namespace (c++)

Program工程 npm

  • Promgram
  • Module
  • Package
  • Library

前端进阶笔记(一)---JS语言通识的更多相关文章

  1. 前端进阶笔记之核心基础知识---那些HTML标签你熟悉吗?

    目录 1.交互实现 1.1 meta标签:自动刷新/跳转 1.2 title标签:消息提醒 2.性能优化 2.1 script标签:调整加载顺序提升渲染速度 2.2 link标签:通过预处理提升渲染速 ...

  2. 进阶笔记(1)——JavaScript 语言精碎

    调用:(调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数) 每个函数接受连个附加参数:this (取决于调用的模式).argument. js的四种调用模式及this指向: 1.方法调用:( ...

  3. 进阶笔记(2)——JavaScript语言精碎

    正则       /     正则表达式      / ^   表示字符串开始 (?:...)   表示一个非捕获型分组(没多大意义) 后缀 ? 表示匹配 0 或 1次 ( ... )   表示捕获型 ...

  4. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  5. 前端进阶(12) - css 的弱化与 js 的强化

    css 的弱化与 js 的强化 web 的三要素 html, css, js 在前端组件化的过程中,比如 react.vue 等组件化框架的运用,使 html 的弱化与 js 的强化 成为了一种趋势, ...

  6. JS 语言核心(JavaScript权威指南第六版)(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  7. 【前端】Web前端学习笔记【1】

    ... [2015.12.02-2016.02.22]期间的学习笔记. 相关博客: Web前端学习笔记[2] 1. JS中的: (1)continue 语句 (带有或不带标签引用)只能用在循环中. ( ...

  8. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  9. web前端开发分享-css,js入门篇(转)

    转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...

随机推荐

  1. [C#.NET 拾遗补漏]03:你可能不知道的几种对象初始化方式

    阅读本文大概需要 1.2 分钟. 随着 C# 的升级,C# 在语法上对对象的初始化做了不少简化,来看看有没有你不知道的. 数组的初始化 在上一篇罗列数组的小知识的时候,其中也提到了数组的初始化,这时直 ...

  2. 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类

    概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...

  3. Uber基于Apache Hudi构建PB级数据湖实践

    1. 引言 从确保准确预计到达时间到预测最佳交通路线,在Uber平台上提供安全.无缝的运输和交付体验需要可靠.高性能的大规模数据存储和分析.2016年,Uber开发了增量处理框架Apache Hudi ...

  4. 01 . Docker原理部署及常用操作命令

    Docker的来源及构造: 容器是一种基础工具:泛指任何用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳,储存,运输物品: 物品可以被放置在容器中,而容器可以保护内容物: 人类使用容器的历史有十 ...

  5. 局域网访问电脑中VMware虚拟机

    场景 你在自己的台式机或笔记本中使用VMware Workstation搭建了一个虚拟机系统,如Debian.Fedora等Linux系统.现在你希望使用局域网中另一台电脑访问你电脑上的虚拟机系统,怎 ...

  6. Redis底层结构全了解

    第一篇文章,思来想去,写一写Redis吧,最近在深入研究它. 一丶Redis底层结构 1. redis 存储结构 redis的存储结构从外层往内层依次是redisDb.dict.dictht.dict ...

  7. (三)log4j常用配置

    控制台(console) log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = ...

  8. web资源图分析

    随着请求数增加,吞吐量没有增大,服务器仍然可以处理,那就是带宽问题 Web资源图是从服务器的角度进行统计分析的,和事务图是两个纬度. 1,每秒点击数 每秒点击数( Hits per Second)统计 ...

  9. Python里的黄金库,学会了你的工资至少翻一倍

    作者:[已重置]链接:https://zhuanlan.zhihu.com/p/26054228来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 阅读本文大概需要5分钟 ...

  10. 一文梳理JS事件

    JavaScript与HTML的交互是通过事件进行的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间. 事件流 事件捕获 事件冒泡 事件处理程序 事件委托 1. 事件流 如果单机页面上的某个按钮, ...