程式à
外部_宣告
| 程式外部_宣告
外部_宣告 à
功能_定義
| 宣告
功能_定義 à 型別_說明宣告符 復合_宣告
型別_說明à
void
| char
| int
| float
宣告符指標 直接_宣告符
| 直接_宣告符
指標à| '*' 指標
直接_宣告符
識別符號|直接_宣告符』[『 『]』
|直接_宣告符 』[』 常數_表達 』]』
| 識別符號 '(' 引數_目錄')'
| 識別符號 '(' ')'
|直接_宣告符 『,』 識別符號_目錄
識別符號_目錄
: 識別符號
| 識別符號_目錄',' 識別符號
常數_表達à
條件_表達
引數_目錄à
引數_宣告
| 引數_目錄',' 引數_宣告
引數_宣告 à
宣告_符
識別符號復合_宣告 à
| ''
| ''
宣告_目錄à
宣告| 宣告_目錄宣告
宣告à初始化_宣告符
| 初始化_宣告符_目錄',' 初始化_宣告符
初始化_宣告符 à
宣告符| 宣告符 '=' 初始化
初始化 à
分配_表達
| ''
| ''
初始化_目錄à
初始化| 初始化_目錄',' 初始化
宣告_目錄à
宣告| 宣告_目錄宣告
宣告 à
| 復合_宣告
| 表達_宣告
| 選擇_宣告
| 迭代_宣告
| 跳轉_宣告
表達_宣告 à
| 表達 ';'
選擇_宣告
: 假設 '(' 表達 ')' 宣告
| 假設 '(' 表達 ')' 宣告 否則 宣告
迭代_宣告à
當 '(' 表達 ')' 宣告
| f或 '(' 表達_宣告 表達_宣告 ')' 宣告
| f或 '(' 表達_宣告 表達_宣告 表達 ')' 宣告
跳轉_宣告
| continue ';'
| break ';'
| return ';'
| return 表達 ';'
表達: 分配_表達
| 表達 ',' 分配_表達
分配_表達 à
條件_表達
| 一元_表達
分配_操作分配_表達
條件_表達 à
邏輯_或_表達
| 邏輯_或_表達 '?' 表達 ':' 條件_表達
邏輯_或_表達
à邏輯_和_表達
| 邏輯_或_表達 或_op 邏輯_和_表達
邏輯_和_表達
: 含_或_表達
| 邏輯_和_表達 和_op 含_或_表達
含_或_表達à
異_或_表達
| 含_或_表達 '|' 異_或_表達
異_或_表達
: 和_表達
| 異_或_表達 '^' 和_表達
和_表達
: 平等_表達
| 和_表達 '&' 平等_表達
平等_表達
: 關係_表達
| 平等_表達 eq_op 關係_表達
| 平等_表達 ne_op 關係_表達
關係_表達
: sh假設t_表達
| 關係_表達 '<' sh假設t_表達
| 關係_表達 '>' sh假設t_表達
| 關係_表達 le_op sh假設t_表達
| 關係_表達 ge_op sh假設t_表達
sh假設t_表達
: 新增_表達
| sh假設t_表達 left_op 新增_表達
| sh假設t_表達 right_op 新增_表達
新增_表達
: 乘法_表達
| 新增_表達 '+' 乘法_表達
| 新增_表達 '-' 乘法_表達
乘法_表達
: 投_表達
| 乘法_表達 '*' 投_表達
| 乘法_表達 '/' 投_表達
| 乘法_表達 '%' 投_表達
投_表達
: 一元_表達
| '(' 型別_名')' 投_表達
一元_表達
: 字尾_表達
| inc_op 一元_表達
| dec_op 一元_表達
| 一元_操作投_表達
| sizeof 一元_表達
| sizeof '(' 型別_名')'
字尾_表達 à
: 基本_表達
| 字尾_表達 '[' 表達 ']'
| 字尾_表達 '(' ')'
| 字尾_表達 '(' 賦值_表達_目錄')'
| 字尾_表達 '.' 識別符號
| 字尾_表達 ptr_op 識別符號
| 字尾_表達 inc_op
| 字尾_表達 dec_op
基本_表達 à
識別符號| 常數
| 字串
| '(' 表達 ')'
賦值_表達_目錄
: 分配_表達
| 賦值_表達_目錄',' 分配_表達
一元_operat或
分配_操作à
| mul_assign
| div_assign
| mod_assign
| add_assign
| sub_assign
| left_assign
| right_assign
| 和_assign
| x或_assign
| 或_assign
st或age_class_說明à
型別def
| extern
| static
| auto
| register
struct_或_union_spec假設ier
: struct_或_union 識別符號 ''
| struct_或_union ''
| struct_或_union 識別符號
struct_或_union
: struct
| union
struct_宣告_目錄
: struct_宣告
| struct_宣告_目錄struct_宣告
struct_宣告
: spec假設ier_qual假設ier_目錄struct_宣告符_目錄';'
spec假設ier_qual假設ier_目錄à
型別_說明spec假設ier_qual假設ier_目錄
| 型別_spec假設ier
| 型別_qual假設ier spec假設ier_qual假設ier_目錄
| 型別_qual假設ier
struct_宣告符_目錄à
struct_宣告符
| struct_宣告符_目錄',' struct_宣告符
struct_宣告符 à
: 宣告符
| ':' 常數_表達
| 宣告符 ':' 常數_表達
enum_說明à
enum ''
| enum 識別符號 ''
| enum 識別符號
enumerat或_目錄à
enumerat或
| enumerat或_目錄','
enumerat或
enumerat或 à
識別符號| 識別符號 '=' 常數_表達
型別_qual假設ier à
const
| volatile
型別_qual假設ier_目錄à
型別_qual假設ier
| 型別_qual假設ier_目錄型別_qual假設ier
引數_型別_目錄à
引數_目錄
| 引數_目錄',' ellipsis
引數_目錄à
: 引數_宣告
| 引數_目錄',' 引數_宣告
型別_名à
spec假設ier_qual假設ier_目錄
| spec假設ier_qual假設ier_目錄抽象_宣告符
抽象_宣告符 à
指標| 直接_抽象_宣告符
| 指標 直接_抽象_宣告符
直接_抽象_宣告符 à
'('抽象_宣告符 ')'
| '[' 常數_表達 ']'
| 直接_抽象_宣告符 '[' ']'
| 直接_抽象_宣告符 '[' 常數_表達 ']'
| '(' 引數_型別_目錄')'
| 直接_抽象_宣告符 '(' ')'
| 直接_抽象_宣告符 '(' 引數_型別_目錄')'
標識_宣告 à
識別符號 ':' 宣告
| 案例 常數_表達 ':' 宣告
| 預設 ':' 宣告
2 文法和語言
字母表 字母表是元素的非空有窮集合,字母表中的元素稱為符號,因此字母表也稱為符號集。符號串 由字母表中的符號組成的任何有窮序列稱為符號串。在符號串中,符號的順序是非常重要的。如果某符號串x中有m個符號,則稱其長度為m,表示為 x m。允許空符號串,即不包含任何符號的字串,用 表示,其長度為0,即 0...
2 文法和語言
2.3文法和語言的形式定義 語法只定義什麼樣的符號串行是合法的,與這些符號的含義毫無關係,對pascal,乙個上下文無關文法可定義符號串a b c是合乎語法的,a b 不。若b實型,c布林,或b c中任何乙個沒事先說明,程式語言的語義分兩 靜態語義和動態語義 靜態語義是一系列限定規則 動態語義也稱執...
作業2 文法和語言
1.文法g z z azb ab定義的是什麼樣的語言?產生式有 z azb,z ab 因此有 z ab,z azb a b 重複使用產生式z azb,得 z azb a zb a zb a b 所以,文法所確定的語言為l g z 2.寫出教材22頁例2.2中識別符號的文法四元組形式。文法g vn,v...