語言文法2

2022-05-26 04:18:10 字數 4493 閱讀 1984

程式à

外部_宣告

| 程式外部_宣告

外部_宣告 à

功能_定義

| 宣告

功能_定義 à 型別_說明宣告符 復合_宣告

型別_說明à

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...