文法分析2

program à                  //程序

external_declaration       //外部声明

| program external_declaration

external_declaration à        //外部声明

function_definition        //函数定义

| declaration              //声明

function_definition à type_specifier declarator compound_statement

类型说明符     声明     复合语句

type_specifier à

VOID

| CHAR

| INT

| FLOAT

declarator

pointer direct_declarator    //指针 直接说明符

| direct_declarator

Pointerà        //指针

‘*‘

| ‘*‘ pointer

direct_declarator     //直接说明符

IDENTIFIER     //标识符

|direct_declarator’[‘ ‘]’     ////直接说明符

|direct_declarator ’[’ constant_expression ’]’      //常量表达式

| IDENTIFIER ‘(‘ parameter_list ‘)‘        //参数表

| IDENTIFIER ‘(‘  ‘)‘

|direct_declarator  ‘,’  identifier_list      //标识符列表

identifier_list     //标识符列表

: IDENTIFIER   //标识符

| identifier_list ‘,‘ IDENTIFIER

constant_expressionà      //常量表达式

conditional_expression   //条件表达式

parameter_list à      //参数表

parameter_declaration   //参数声明

| parameter_list ‘,‘ parameter_declaration

参数表         参数声明
parameter_declaration à  //参数声明

declaration_specifiers  IDENTIFIER

声明说明            标识符

compound_statement à    //复合语句

‘{‘ ‘}‘

| ‘{‘ statement_list ‘}‘   //语句列表

| ‘{‘ declaration_list  statement_list ‘}‘

声明列表       语句列表

declaration_list à    //声明列表

declaration

| declaration_list declaration

Declarationà   // 声明

init_declarator    //初始化声明符

| init_declarator_list ‘,‘ init_declarator

初始化声明符列表

init_declarator à

declaratory        //声明符

| declarator ‘=‘ initializer   //初始化

Initializer à    //初始化

assignment_expression  //赋值表达式

| ‘{‘ initializer_list ‘}‘    //初始化列表

| ‘{‘ initializer_list ‘,‘ ‘}‘

initializer_list à      //初始化列表

initializer

| initializer_list ‘,‘ initializer

statement_listà        //语句列表

statement

| statement_list statement

Statement à

| compound_statement   //复合语句

| expression_statement   //表达式语句

| selection_statement    //选择语句

| iteration_statement    //循环语句

| jump_statement      //跳转语句

expression_statement à   //表达式语句

‘;‘

| expression ‘;‘     //表达式

selection_statement   //选择语句

: IF ‘(‘ expression ‘)‘ statement

| IF ‘(‘ expression ‘)‘ statement ELSE statement

iteration_statementà   //循环语句

WHILE ‘(‘ expression ‘)‘ statement

| FOR ‘(‘ expression_statement expression_statement ‘)‘ statement

| FOR ‘(‘ expression_statement expression_statement expression ‘)‘ statement

jump_statement     //跳转语句

| CONTINUE ‘;‘

| BREAK ‘;‘

| RETURN ‘;‘

| RETURN expression ‘;‘

expression

: assignment_expression   //赋值表达式

| expression ‘,‘ assignment_expression

assignment_expression à     //赋值表达式

conditional_expression    //条件表达式

| unary_expression  assignment_operator  assignment_expression

一元表达式       赋值运算符       赋值表达式

conditional_expression à      //条件表达式

logical_or_expression    //逻辑或表达式

| logical_or_expression ‘?‘ expression ‘:‘ conditional_expression

逻辑或表达式                  条件表达式

logical_or_expression à

logical_and_expression     //逻辑与

| logical_or_expression OR_OP logical_and_expression

logical_and_expression      //逻辑与

: inclusive_or_expression   //包容或表达式

| logical_and_expression AND_OP inclusive_or_expression

inclusive_or_expressionà

exclusive_or_expression   //唯一或表达式

| inclusive_or_expression ‘|‘ exclusive_or_expression

exclusive_or_expression       //唯一或表达式

: and_expression

| exclusive_or_expression ‘^‘ and_expression

and_expression

: equality_expression   //平等表达

| and_expression ‘&‘ equality_expression

equality_expression   //平等表达

: relational_expression   //关系式

| equality_expression EQ_OP relational_expression

| equality_expression NE_OP relational_expression

relational_expression   //关系式

: shift_expression   //移动式

| relational_expression ‘<‘ shift_expression

| relational_expression ‘>‘ shift_expression

| relational_expression LE_OP shift_expression

| relational_expression GE_OP shift_expression

shift_expression    //移动式

: additive_expression  //附加表达式

| shift_expression LEFT_OP additive_expression

| shift_expression RIGHT_OP additive_expression

additive_expression   //附加表达式

: multiplicative_expression   //乘法式

| additive_expression ‘+‘ multiplicative_expression

| additive_expression ‘-‘ multiplicative_expression

multiplicative_expression   //乘法式

: cast_expression     //转换表达式

| multiplicative_expression ‘*‘ cast_expression

| multiplicative_expression ‘/‘ cast_expression

| multiplicative_expression ‘%‘ cast_expression

cast_expression      //转换表达式

: unary_expression  //一元表达式

| ‘(‘ type_name ‘)‘ cast_expression

unary_expression   //一元表达式

: postfix_expression   //后缀表达式

| INC_OP unary_expression  //一元表达式

| DEC_OP unary_expression

| unary_operator cast_expression  //转换表达式

| SIZEOF unary_expression

| SIZEOF ‘(‘ type_name ‘)‘   //类型名称

postfix_expression à  //后缀表达式

: primary_expression  //主要表现

| postfix_expression ‘[‘ expression ‘]‘

| postfix_expression ‘(‘ ‘)‘

| postfix_expression ‘(‘ argument_expression_list ‘)‘

参数表达式列表

| postfix_expression ‘.‘ IDENTIFIER  //标识符

| postfix_expression PTR_OP IDENTIFIER

| postfix_expression INC_OP

| postfix_expression DEC_OP

primary_expression à   //主要表现

IDENTIFIER

| CONSTANT

| STRING_LITERAL

| ‘(‘ expression ‘)argument_expression_list   //参数表达式列表

: assignment_expression

| argument_expression_list ‘,‘ assignment_expression

unary_operator   //一元运算符

: ‘&‘

| ‘*‘

| ‘+‘

| ‘-‘

| ‘~‘

| ‘!‘

assignment_operator à  //赋值运算符

‘=‘

| MUL_ASSIGN

| DIV_ASSIGN

| MOD_ASSIGN

| ADD_ASSIGN

| SUB_ASSIGN

| LEFT_ASSIGN

| RIGHT_ASSIGN

| AND_ASSIGN

| XOR_ASSIGN

| OR_ASSIGN

storage_class_specifier à  //存储类说明

TYPEDEF

| EXTERN

| STATIC

| AUTO

| REGISTER

struct_or_union_specifier  //结构或联合说明符

: struct_or_union IDENTIFIER ‘{‘ struct_declaration_list ‘}‘

结构声明表

| struct_or_union ‘{‘ struct_declaration_list ‘}‘

| struct_or_union IDENTIFIER

struct_or_union

: STRUCT

| UNION

struct_declaration_list   //结构声明表

: struct_declaration   //结构声明

| struct_declaration_list struct_declaration

struct_declaration  //结构声明

: specifier_qualifier_list struct_declarator_list ‘;‘

specifier_qualifier_list à

type_specifier specifier_qualifier_list

| type_specifier

| type_qualifier specifier_qualifier_list

| type_qualifier

struct_declarator_list à  //结构声明表

struct_declarator    //结构声明

| struct_declarator_list ‘,‘ struct_declarator

struct_declarator à        : declarator

| ‘:‘ constant_expression

| declarator ‘:‘ constant_expression

enum_specifier à  //枚举说明

ENUM ‘{‘ enumerator_list ‘}‘   //枚举列表

| ENUM IDENTIFIER ‘{‘ enumerator_list ‘}‘   //枚举列表

| ENUM IDENTIFIER

enumerator_list à  //枚举列表

enumerator

| enumerator_list ‘,‘ enumerator

Enumerator à

IDENTIFIER

| IDENTIFIER ‘=‘ constant_expression

type_qualifier à

CONST

| VOLATILE

type_qualifier_list à

type_qualifier

| type_qualifier_list type_qualifier

parameter_type_list à  //参数类型列表

parameter_list

| parameter_list ‘,‘ ELLIPSIS

parameter_list à       //参数类型列表

: parameter_declaration  //参数类型说明

| parameter_list ‘,‘ parameter_declaration

type_name à

specifier_qualifier_list

| specifier_qualifier_list  abstract_declarator

抽象声明符

abstract_declarator à   //抽象声明符

pointer

| direct_abstract_declarator

| pointer direct_abstract_declarator

direct_abstract_declarator à  //直接抽象声明

‘(‘ abstract_declarator ‘)‘   //抽象声明符

| ‘[‘ ‘]‘

| ‘[‘ constant_expression ‘]‘   //常量表达式

| direct_abstract_declarator ‘[‘ ‘]‘

| direct_abstract_declarator ‘[‘ constant_expression ‘]‘

| ‘(‘ ‘)‘

| ‘(‘ parameter_type_list ‘)‘   //参数类型列表

| direct_abstract_declarator ‘(‘ ‘)‘

| direct_abstract_declarator ‘(‘ parameter_type_list ‘)‘

labeled_statement à   //标签语句

IDENTIFIER ‘:‘ statement

| CASE constant_expression ‘:‘ statement  //常量表达式

| DEFAULT ‘:‘ statement

时间: 2024-10-12 12:54:00

文法分析2的相关文章

词法与文法分析程序

1.词法与文法分析程序功能:   主要语句:begin<语句串>end 输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“成功”,否则输出“错误”. 2.符号与种别码对照表: 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)* 10 >= 24 dd* 11 = 25 + 13 ; 26 - 14

自然语言分析工具Hanlp依存文法分析python使用总结(附带依存关系英文简写的中文解释)

最近在做一个应用依存文法分析来提取文本中各种关系的词语的任务.例如:text='新中国在马克思的思想和恩格斯的理论阔步向前': ps:这里马克思和恩格斯原来我是用的毛zd和邓xp,但是系统说这两个名字违规了........我很爱国的好不好!!!!!! 我需要提取这个text中的并列的两个关系,从文中分析可知,"马克思的思想"和"恩格斯的理论"是两个并列关系的短语,所以想要将其提取出来: 首先大致了解一下依存文法分析的前提条件,将句子分词并进行词性标注,这一步非常关键

LL(1)文法分析表的构造和分析过程示例

在考完编译原理之后才弄懂,悲哀啊.不过懂了就好,知识吗,不能局限于考试. 文法: E→TE' E'→+TE'|ε T→FT ' T'→*FT'|ε F→id| (E) 一.首先判断是不是 LL(1)文法 -------------------------------------------------------------------------------------------------------- 文法G的任意两个具有相同左部的产生式 A --> α|β 满足下列条件: 1.如果α和

NPL:语义分析之依存文法分析

依存文法是由法国语言学家L.Tesniere在其著作<结构句法基础>(1959年)中提出,对语言学的发展产生了深远的影响,特别是在计算语言学界备受推崇. 依存语法通过分析语言单位内成分之间的依存关系揭示其句法结构,主张句子中核心动词是支配其它成分的中心成分,而它本身却不受其它任何成分的支配,所有受支配成分都以某种依存关系从属于支配者. 在20世纪70年代,Robinson提出依存语法中关于依存关系的四条公理,在处理中文信息的研究中,中国学者提出了依存关系的第五条公理,如下: 1.一个句子中只有

编译原理LL1文法分析树(绘图过程)算法实现

import hjzgg.analysistable.AnalysisTable; import hjzgg.first.First; import hjzgg.follow.Follow; import hjzgg.treenode.TreeNode; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Grap

编译原理LL1文法分析表算法实现

import hjzgg.first.First; import hjzgg.follow.Follow; import hjzgg.tablenode.TableNode; import hjzgg.treenode.TreeNode; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.Stack; im

文法分析与递归下降分析

C语言程序--〉main函数,调用数据库|函数声明|函数定义 Main函数--〉函数定义变量|调用函数 函数声明--〉函数名.参数.函数类型 定义变量--〉函数类型 函数类型--〉void| CHAR| INT| FLOAT 定义--〉定义变量|调用函数 参数--〉参数类型.参数名 参数类型--〉void| CHAR| INT| FLOAT 易c语言文法 <程序> -〉 <外部声明> | <函数定义> <外部声明> -〉<头文件> | <变

文法分析相关笔记

描述语言语法结构的形式规则称为文法.文法是一个四元组,具体组成如图所示. 文法一共四类,若文法G=(Vn,Vt,P,S)的每个产生式α→β,均有α∈(Vn∪Vt)*,则称G为0型文法.在0型文法上加以扩展,则得到以下文法: 1型文法:G的任何产生式α→β(S→ε除外)均满足左部中文法符号的个数小于右部文法的符号的个数,又称为上下文有关文法,意味着对非终结符的替换考虑必须考虑上下文(eg:有生产式如:αAB→Βcb,假设该生产式符合1型文法的生产式,则非终结符A只有在左边为α右边为B的情况才能转化

201406114215+林志杰+文法分析

语法分析是编译原理的核心部分.语法分析的作用是识别由词法分析给出的单词符号序列是否是给定文法的正确句子. 1) 不存在终结符号a使得α和β都能够推导出以a开头的串. 2) α和β中最多只有一个可以推导出空串. 3) 如果βÞ*ε,那么α不能推导出任何以FOLLOW(A)中某个终结符号开头的串.类似地,如果αÞ*ε,那么β不能推导出任何以FOLLOW(A)中某个终结符号开头的串. 英语不好,太多太多需要翻译,也难看懂,希望老师多给点细心讲解,辛苦了

CSUFT 编译原理实验二LL(1)文法分析

1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <stack> 5 #include <queue> 6 #include <map> 7 #include <algorithm> 8 #include <vector> 9 10 using namespace std; 11 12 char A[20];/*分