文法改进

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 à

declarator

| 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

: ‘&‘

| ‘*‘

| ‘+‘

| ‘-‘

| ‘~‘

| ‘!‘

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

时间: 2024-10-11 01:51:48

文法改进的相关文章

文法改进(消除左递归)

在上次的文法中有存在左递归的情况,将会影响以后的语法分析使用,所以需要消除左递归,以便于语法分析使用. <程序> → <外部声明> <程序>` <程序>`→<程序> | ε <外部声明> → <函数定义> | <定义> <函数定义> → <函数声明> <函数体> <函数声明> → <函数返回类型> <函数头> <函数返回类型>

编译原理大作业(用java编写小型GCC 编译器)

以前只用编译器编译程序,现在学完编译原理这门课以后,通过编译大作业,我对编译器的工作原理有了比较清晰的认识 编译器的工作原理 编译器 (Compiler) 是一种将由一种语言编写的程序转换为另一种编程语言的可执行程序. 现代软件对于编译器的需求远甚从前, 究其原因很简单: 作为中间层, 编译器是构建更高层抽象的基础设施. 编译器意欲将人类可阅读的高阶代码, 翻译为机器能运行的低阶代码. 现代编译器的主要工作流程为: 源代码(source code)→ 预处理器(preprocessor)→ 编译

文法的改进

<program>-><external_declaration> | <program> <external_declaration> <external_declaration> -><function_definition> | <declaration> <function_definition> -><type_specifier> <declarator>

Thinking in C++: 第1章 为什么C++会成功(改进了C的缺点,可复用C的知识与库,执行效率相当)

本文内容摘抄自C++经典书籍:<Thinking in C++>   操作概念:OOP程序像什么 我们已经知道,用C 语言编写的过程程序就是一些数据定义和函数调用.要理解这种程序的含义,程序员必须掌握函数调用和函数实现的本身.这就是过程程序需要中间表示的原因.中间表示容易引起混淆,因为中间表示的表述是原始的,更偏向于计算机,而不偏向于所解决的问题. 因为 C++ 向 C 语言增加了许多新概念,所以程序员很自然地认为,C + +程序中的m a i n ( )会比功能相同的 C 程序更复杂. 但令

形状文法--建筑风格分类总结

1.Shape –Talking about seeing and doing(田小娣) 在Stiny George的Shape-Talking about seeing and doing文章中,Stiny将shape designs比作“sentences”,句子由词汇,语法和句子内部关系操作组成,对于shape designs这些成分就是definited shapes, a set of rules, relationship between shapes,根据这些进行作品设计,但是这种

编译原理——算符优先分析文法(附源代码)

算符优先分析文法 一.写在前面 算符优先分析文法是一种工具,在编译的过程中,隶属于语法分析环节,却又与中间代码的生成息息相关,编译可以分为五个阶段:词法分析.语法分析.语义分析(中间代码的生成).代码优化.目标代码生成.语法分析是指:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语.子句.句子.程序段.程序),并确定整个输入串是否构成语法上正确的程序.也就是说语法分析是检验输入串的语法是否正确,注意这里的语法正确,只是简单地符合自己定义的规范,而不能检测出运行时错误,比如"X/0&

基于HBase的时间序列数据库(改进)

基本知识: 期望:1.利用高效的行.列键组织数据存储方式和使用平滑的数据持久策略缓解集群压力 2.利用zookeeper保障数据一致性(选举Leader) 提高性能的技术:数据压缩.索引技术.实体化视图 zookeeper 监控HRegionServer,保存Root Region实际地址,HMaster物理地址,减轻分布式应用从头开发协作服务的负担 HMaster管理HRegionServer负载均衡 日志根据Hadoop的SequenceFile存储 HBase主要处理实际数据文件和日志文件

结对项目改进(林莉 + 宫丽君)

1.产生随机的四位数,如果出现0则把0赋值为1 1 int rightNum = 0; //正确题数 2 int wrongNum = 0; //错误题数 3 Scanner scan = new Scanner(System.in); 4 for(int i =1;i<=10;i++) { 5 System.out.println("第"+ i +"题"); 6 int num1 = (int )(Math.random()*10); 7 int num2

ASP.NET MVC轻教程 Step By Step 6——改进表单

上一节我们使用原始的HTML表单来完成留言功能,但是ASP.NET MVC提供了丰富的HTML辅助方法来帮助我们构建更简洁优雅的表单. Step 1. 修改Form标签 首先,我们可以使用Html.BeginForm来创建form标签.这样我们可以将原来的表单改成如下代码. @{Html.BeginForm("Save", "Home"); } <label for="nickname">昵称</label> <in