跳轉到內容

程式語言/語法規範

來自華夏公益教科書,開放的書籍,開放的世界

描述語言有兩種方式:透過其語法語義。語言的語法是一組規則,定義了哪些字串(句子語句)屬於該語言;語言的語義描述了給定語句的含義。

指定程式語言的語法

[編輯 | 編輯原始碼]

詞素和記號

[編輯 | 編輯原始碼]

對於一種語言,可以將一個語句分解成一系列詞素,即語言的不可分解的構建塊。例如,以下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]

華夏公益教科書