编程范式(二)完 | 字节青训营笔记

65 阅读3分钟

领域特定语言

1、简介:

领域特定语言(Domain-Specific Language,DSL)是一种专注于某个应用程序领域的计算机语言。它与通用编程语言(General Purpose Language,GPL)不同,通用编程语言可以用来解决各种领域的问题,而领域特定语言则专注于解决特定领域的问题。

例如,HTML 是一种用于描述 Web 页面的标记语言,它是一种领域特定语言;CSS 是一种用于描述页面样式的语言,也是一种领域特定语言;SQL 是一种用于创建和检索关系型数据库的语言,也是一种领域特定语言。

领域特定语言的优点在于它能够提供更简洁、更易于理解和使用的语法来解决特定领域的问题。它能够提高开发效率,并且能够让非程序员更容易地参与到软件开发过程中来。

当然,领域特定语言也有其局限性。由于它只专注于特定领埴,因此在其他领域可能不太适用。此外,学习和使用领域特定语言可能需要一定的学习成本。

2、什么是领域特定语言

image.png

3、lexer

Lexer,也称为词法分析器,是一种软件组件,它将字符串分解为更小的单元,这些单元可以被语言理解。这些更小的单元被称为词法记号或词素。

词法分析器的作用是将源代码中的字符序列转换为记号序列。它通过扫描源代码,识别出各种记号,如关键字、标识符、常量、运算符等。这些记号将被传递给语法分析器进行进一步的处理。

SQL Token分类
  • 注释
  • 关键字
  • 操作符
  • 空格
  • 字符串
  • 变量

image.png

4、parser语法规则

上下文无关语法规则

image.png

  • 推导式:表示非终结符到(非终结符或终结符)的关系。
  • 终结符:构成句子的实际内容。可以简单理解为词法分析中的token.
  • 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。
5、Parser_LL

LL解析是一种自顶向下的解析方法,用于语法分析阶段的编译器设计。需要输入字符串、堆栈、给定语法的解析表和解析器。

LL解析表的构造需要满足一些条件,如语法必须没有左递归,不含二义性,并且必须是左因子化的,以便语法是确定性语法。这些条件是必要但不充分的。

LL:从左到右检查,从左到右构建语法树

image.png

6、Parser_LR

LR解析器是一种自底向上的解析器,用于解析上下文无关语法。

LR:从左到右检查,从右到左构建语法树

LL(K) > LR(1) > LL(1),括号里的内容构建语法树需要向下看的数量

image.png

7、Tools

进行语法分析

image.png

形成语法树

image.png

课程总结:

image.png