📅  最后修改于: 2023-12-03 14:55:05.253000             🧑  作者: Mango
无上下文语法,又称上下文无关语法,是指一种语法形式,其中每个符号的含义只与自身有关,而与其上下文无关。该语法常用于编译原理中的语法分析,也用于文本编辑器的语法高亮。
BNF是一种用于编写上下文无关文法的形式化的语言。它由一系列符号表示,其中最基本的是非终结符。除非终结符外,语法中的每个符号都有一个定义,其定义通常用元语(如非终结符和正则表达式)表示,从而使得符号的含义具有递归性。
BNF通常用于定义编程语言的语法,例如C语言的语法可以使用以下的BNF表示:
<declaration> ::= <type> <identifier> ;
<type> ::= int | float | double | char | short | long | void
<identifier> ::= [A-Za-z0-9]* // 由字母与数字构成,且最少一位
上述定义中,<declaration>
表示变量的声明,它由<type>
、<identifier>
和分号构成。<type>
表示变量的类型,它可以是int、float、double、char、short、long或void中的任何一个。<identifier>
表示变量的名称,它由字母和数字构成(至少有一个字符)。
EBNF是BNF的扩展形式,它引入了一些新的语法元素,例如可选项、重复选择和分组。EBNF更容易编写和阅读,因为它允许使用更自然的语言结构。同样以C语言的语法为例,以下是使用EBNF表示的声明:
declaration ::= type identifier ';'
type ::= 'int' | 'float' | 'double' | 'char' | 'short' | 'long' | 'void'
identifier ::= [A-Za-z0-9]+
上述定义中,declaration
、type
和identifier
都是非终结符。引号括起来的字符串表示终结符,例如'int'表示C语言中的关键字int,分号也是终结符。
Markdown也使用了无上下文语法,它基于一些简单而直观的想法,例如在文本中使用星号和下划线表示加粗和斜体。以下是一些常见的Markdown无上下文语法:
这是 **加粗** 和 *斜体*。
# 一级标题
## 二级标题
### 三级标题
- 列表项1
- 列表项2
> 这是引用的文本。
无上下文语法是Markdown的一项重要特征,它使得Markdown语法简单、易学易用且易读。在开发文本编辑器或其它相关应用程序时,了解无上下文语法是非常重要的。