第一范文网 - 专业文章范例文档资料分享平台

编译原理-LL(1)文法源代码(实验三)

来源:用户分享 时间:2025/6/15 23:40:34 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

;

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) {

搜索更多关于: 编译原理-LL(1)文法源代码(实验三) 的文档
编译原理-LL(1)文法源代码(实验三).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7gjb70zk826o2vt5lzj67d82u9zjet00ieo_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top