"LL(1)语法分析程序设计与实现C语言.doc"

2 下载量 184 浏览量 更新于2024-01-30 2 收藏 3.96MB DOC 举报
本文档介绍了一种用C语言实现的语法分析程序,旨在通过设计LL(1)文法辨识程序来深入理解自顶向下的语法分析思想。实验内容包括:阅读理解实验案例中的LL(1)文法判别程序实现,参考实验案例完成简单的LL(1)文法判别程序设计。实验的重难点在于求解FIRST集合、FOLLOW集合和SELECT集合元素,并构造预测分析表。 本实验的学时为4个课时,所需的实验设备与环境为C语言编译环境。 实验案例中的规定是参考教材第93页的预测分析方法和第94页的图5.11预测分析程序框图,编写能辨识表达式文法的程序,该表达式文法包括以下产生式: E → ET | TT → TF | FF → i | (E) 参考代码如下: ``` /*程序名称:LL(1)语法分析程序*/ /* E->ET | T */ /* T->T*F | F */ /* F->(E) | i */ #include <stdio.h> #include <stdlib.h> #include <string.h> int i = 0; //输入字符串的索引 char str[100]; //输入的LL(1)文法字符串 void E(); void T(); void F(); void E() { T(); if (str[i] == 'T') { i++; E(); } } void T() { F(); if (str[i] == '*') { i++; T(); } } void F() { if (str[i] == 'i') { i++; } else if (str[i] == '(') { i++; E(); if (str[i] == ')') { i++; } } else { printf("输入字符串不是表达式文法的句子\n"); exit(0); } } int main() { printf("请输入LL(1)文法字符串: "); scanf("%s", str); E(); if (str[i] == '\0') { printf("输入字符串是表达式文法的句子\n"); } else { printf("输入字符串不是表达式文法的句子\n"); } return 0; } ``` 以上代码通过自顶向下的递归下降分析方法实现了对输入的LL(1)文法字符串的判断,能够自动判断输入字符串是否为给定文法的句子,并给出相应的分析过程。 本实验通过实现LL(1)文法辨识程序,深入理解了自顶向下的语法分析思想。在实验过程中,需要根据规定的文法求解FIRST集合、FOLLOW集合和SELECT集合元素,并构造预测分析表。实验的目的在于加深对语法分析方法的理解和掌握,以及提高编程实践能力。