当前位置:首页 > 编译原理-LL(1)文法源代码(实验三)
;
printf(\符号数目超过限制!\\n\ inErr = 1; continue; } }
/*正确性确认,正确则,执行下下面,否则重新输入*/ Vn[k] = '\\0';
ShowChArray(Vn); ch = ' ';
while('y' != ch && 'n' != ch) {
if('\\n' != ch) {
printf(\输入正确确认?(y/n):\ }
scanf(\ }
if('n' == ch) {
printf(\录入错误重新输入!\\n\ inErr = 1; } else {
inErr = 0; } } }
/*输入终结符*/ void InputVt() {
int inErr = 1; int n,k; char ch; while(inErr) {
printf(\请输入所有的终结符,注意:\ printf(\以#号结束:\\n\ ch = ' '; n = 0;
/*初始化数组*/
while(n < MaxVtNum) {
Vt[n++] = '\\0'; } n = 0;
while(('#' != ch) && (n < MaxVtNum)) {
if(' ' != ch && '\\n' != ch && -1 == IndexCh(ch)) {
Vt[n++] = ch; vtNum++; }
ch = getchar(); }
Vt[n] = '#'; k = n; if('#' != ch) {
if( '#' != (ch = getchar())) {
while('#' != (ch = getchar())) ;
printf(\符号数目超过限制!\\n\ inErr = 1; continue; } }
Vt[k] = '\\0';
ShowChArray(Vt); ch = ' ';
while('y' != ch && 'n' != ch) {
if('\\n' != ch) {
printf(\输入正确确认?(y/n):\ }
scanf(\ }
if('n' == ch) {
printf(\录入错误重新输入!\\n\ inErr = 1; } else {
inErr = 0; } } }
/*产生式输入*/ void InputP() {
char ch;
int i = 0, n,num;
printf(\请输入文法产生式的个数:\ scanf(\ PNum = num;
getchar(); /*消除回车符*/
printf(\请输入文法的%d个产生式,并以回车分隔每个产生式:\ printf(\ while(i < num) {
printf(\第%d个:\ /*初始化*/
for(n =0; n < MaxPLength; n++) buffer[n] = '\\0'; /*输入产生式串*/ ch = ' '; n = 0;
while('\\n' != (ch = getchar()) && n < MaxPLength) {
if(' ' != ch)
buffer[n++] = ch; }
buffer[n] = '\\0';
if(CheckP(buffer)) {
pRNode *pt, *qt;
P[i].lCursor = IndexCh(buffer[0]);
pt = (pRNode*)malloc(sizeof(pRNode)); pt->rCursor = IndexCh(buffer[3]); pt->next = NULL; P[i].rHead = pt; n = 4;
while('\\0' != buffer[n]) {
qt = (pRNode*)malloc(sizeof(pRNode));
qt->rCursor = IndexCh(buffer[n]); qt->next = NULL; pt->next = qt; pt = qt; n++; }
P[i].rLength = n - 3; i++; } else
printf(\输入符号含非法在成分,请重新输入!\\n\ } }
/*判断产生式正确性*/ bool CheckP(char * st) {
int n;
if(100 > IndexCh(st[0])) return false; if('-' != st[1]) return false; if('>' != st[2]) return false;
for(n = 3; '\\0' != st[n]; n ++) {
if(-1 == IndexCh(st[n])) return false; }
return true; }
void First(int U) {
int i,j;
for(i = 0; i < PNum; i++) {
if(P[i].lCursor == U) {
struct pRNode* pt; pt = P[i].rHead; j = 0;
while(j < P[i].rLength) {
共分享92篇相关文档