ll1文法
<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_program_list>-><initializer_program>| <initializer_program_list>< ','> <initializer_program>
<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>
ll1文法的更多相关文章
- 【编译原理】LL1文法语法分析器
上篇文章[编译原理]语法分析--自上向下分析 分析了LL1语法,文章最后说给出栗子,现在补上去. 说明: 这个语法分析器是利用LL1分析方法实现的. 预测分析表和终结符以及非终结符都是针对一个特定文法 ...
- 表达式计算器(LL1文法)
LL(1)文法求算数表达式的值递归子程序法 分析过程: 表达式文法G[E]:E->E+T|E-T|TT->T*F|T/F|T%F|FF->N^F|NN->(E)|NUM|+NU ...
- 编译原理LL1文法分析树(绘图过程)算法实现
import hjzgg.analysistable.AnalysisTable; import hjzgg.first.First; import hjzgg.follow.Follow; impo ...
- 编译原理LL1文法分析表算法实现
import hjzgg.first.First; import hjzgg.follow.Follow; import hjzgg.tablenode.TableNode; import hjzgg ...
- 编译原理LL1文法Follow集算法实现
import hjzgg.first.First; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set ...
- 编译原理 LL1文法First集算法实现
import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap ...
- Compiler Principles 语法分析
语法分析的两种思维方式:1:自顶向下分析 :从语法树的根部推下来一直推到需要确认的终结符号串为止:就是为了找到一个符号串的最左推导 自顶向下分析,因为文法有些是以非终结符开头的另外文法中还可能含有右部 ...
- 软件工程学习之小学四则混合运算出题软件 Version 1.00 设计思路及感想
对于小学四则混合运算出题软件的设计,通过分析设计要求,我觉得为了这个软件在今后便于功能上的扩充,可以利用上学期所学习的<编译原理>一课中的LL1语法分析及制导翻译的算法来实现.这样做的好处 ...
- 文法 LL1
<程序>-><声明列表>|<程序><函数> <声明列表>-><声明>|<声明><声明列表> ...
随机推荐
- Python之for循环和while循环
Python中有两种循环,分别为:for 循环和 while 循环. 循环语句就是在某种条件下,循环的执行某段代码块,并在符合条件的情况下跳出该段循环, 其目的是处理想要进行处理的相同任务.它的关键词 ...
- C 语言实例 - 计算自然数的和
C 语言实例 - 计算自然数的和 自然数是指表示物体个数的数,即由0开始,,,,,,……一个接一个,组成一个无穷的集体,即指非负整数. 实例 - 使用 for #include <stdio.h ...
- C#代码规范整理
命名规范制定意义 1. 方便代码的交流和维护,便于日后自己的再次阅读. 2. 不影响编码的效率,不与大众习惯冲突. 3. 使代码更美观.阅读更方便. 4. 使代码的逻辑更清晰.更易于理解. 名词解释 ...
- CodeForces - 361A-Levko and Table (思维)
Levko loves tables that consist of n rows and n columns very much. He especially loves beautiful tab ...
- Mysql数据表的增删改查
---恢复内容开始--- Mysql数据表的增删改查 1.创建表 语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...
- 转 db_file_multiblock_read_count
http://www.laoxiong.net/table_scan_and_buffer_cache.html 全表扫描与buffer cache https://www.cnblogs.com/R ...
- Zeppelin的入门使用系列之使用Zeppelin来创建临时表UserTable(三)
不多说,直接上干货! 前期博客 Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二) 我们必须要先使用Spark 语句创建临时表UserTable,后续才能使用Spark SQ ...
- 用户 'IIS APPPOOL\**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)
为开发方便-将项目部署到本地IIS上打开网页出现报错 1.打开IIS管理 2.点击应用池 3.找到你部署的网站名,右键“高级设置”——>“进程模型”——>“标识”修改为localsyste ...
- easyUI filebox限定文件大小
转载自:https://www.2cto.com/kf/201701/574667.html 侵删 easyui1.5filebox控件中增加文件大小的验证规则 2017-01-07 09:22:0 ...
- ParallelsDesktop安装DOS7.1并与MAC共享文件
ParallelsDesktop安装DOS7.1并与MAC共享文件 Table of Contents 1. 在Parallels Desktop中安装DOS7.1 2. 配置与Mac共享文件 1 在 ...