跳转到内容

编程语言/语法规范

来自维基教科书,开放的书籍,开放的世界

描述语言有两种方式:通过其语法语义。语言的语法是一组规则,定义了哪些字符串(句子语句)属于该语言;语言的语义描述了给定语句的含义。

指定编程语言的语法

[编辑 | 编辑源代码]

词素和记号

[编辑 | 编辑源代码]

对于一种语言,可以将一个语句分解成一系列词素,即语言的不可分解的构建块。例如,以下w:Perl语句

   do { sleep 1; } while (++$i < 10);

包含词素:do, {, sleep, 1, ;, }, while, (, ++, $i, <, 10, );

词素可以被分组到不同的类别中。这样的类别被称为记号

上下文无关文法

[编辑 | 编辑源代码]
  • 巴科斯范式(BNF)
  • 算术文法
  • 一元否定 (~)

语法树

[编辑 | 编辑源代码]
  • 使用指数等复杂公式的语法树

扩展巴科斯范式

[编辑 | 编辑源代码]

扩展巴科斯范式旨在成为一种精确的方法来指定语言的语法。它是一种元语言,因为它是一种用于描述语言的语言。它也常见于命令用法或帮助文档中。

关于 EBNF 的完整文档可以在以下位置找到:[1].

语言的基本元素将使用 EBNF 终结符来描述,然后将这些终结符组合成逻辑上的更高层次的表达式,使用非终结符来表示整个语言。终结符指定实际有效的字符模式,用于表示诸如语言中变量名的正确语法或表示数字之类的内容。非终结符将给定事物的不同可能表示形式(例如,十进制、十六进制或科学记数法格式的数字常量)分组到单个逻辑事物 ([Numerical_Constant]) 中。最终,通过构建各种语法元素并表达它们组合的方式,最终得到一个符号来表示所讨论语言中的程序。

awk 实用程序的手册页中可以找到一些示例。

(摘自 [2])

首先,它的用法

awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ... ]

方括号中的项是 EBNF 的一个示例,表示 awk 命令行上可选的参数。

其次,用法详细部分部分用 EBNF 指定。

在下面的示例中,诸如 'pattern'、'action'、'expression' 和 'statement' 之类的词是 EBNF 非终结符。

模式-动作语句具有以下形式

   pattern { action }

缺少 { action } 表示打印该行;缺少模式始终匹配。模式-动作语句由换行符或分号分隔。

动作是一系列语句。语句可以是以下之一

             if( expression ) statement [ else statement ]
             while( expression ) statement
             for( expression ; expression ; expression ) statement
             for( var in array ) statement
             do statement while( expression )
             break
             continue
             { [ statement ... ] }
             expression              # commonly var = expression
             print [ expression-list ] [ > expression ]
             printf format [ , expression-list ] [ > expression ]
             return [ expression ]
             next                    # skip remaining patterns on this input line
             nextfile                # skip rest of this file, open next, start at top
             delete array[ expression ]# delete an array element
             delete array            # delete all elements of array
             exit [ expression ]     # exit immediately; status is expression

语句由分号、换行符或右大括号终止。

整个语言也可以用 EBNF 文档化。下面的链接记录了 ANSI 定义的 C++,该文档的许多部分都是用 EBNF 编写的。

[3]

华夏公益教科书