上下文无关文法(context-free grammar,CFG)
【相关概念】
CFG定义:
一个四元数组G=(VN,VT,S,P),其中:
VN:非终结符集合
VT:终结符集
S:开始符号
且VN∩VT=∅,S∈VN
注:
产生式中→的左边称作产生式的头部,→的右边称作产生式的右部或体。P中产生式的一般形式为A→α|β,其中A∈VN,α,β∈(VN∪VT)*
通常用大写字母表示非终结符,小写字母表示终结符。
【数据结构】
C语言
【代码实现】
#include<stdio.h>
#define MaxRightLength 20
#define MaxRuleNumber 20
#define MaxVtNumber 20
#define MaxVnNumber 20
char Vt[MaxVtNumber];//定义终结符集
char Vn[MaxVnNumber];//非终结符
struct rule{
char Left;
char Right[MaxRightLength];
int RightLength;
}grammar;//声明结构体类型
int main(){
int number;//文法表达式数目
int x=0;//非终结符集元素个数
int y=0;//终结符集元素个数
printf("请输入表达式数目number:");
scanf("%d",&number);
struct rule grammar[MaxRuleNumber];//定义文法
char xy[2];
for(int i=0; i<number; i