程式語言/語法規範
描述語言有兩種方式:透過其語法或語義。語言的語法是一組規則,定義了哪些字串(句子或語句)屬於該語言;語言的語義描述了給定語句的含義。
對於一種語言,可以將一個語句分解成一系列詞素,即語言的不可分解的構建塊。例如,以下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 編寫的。