⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcc_yacc.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	else {	    char *p = 0;	    lexPushLookaheadc(c);	    if (lexWithinMode(L_BASE64)) {		/* get each char and convert to bin on the fly... */		yylval.str = NULL;		return lexGetDataFromBase64() ? STRING : 0;		}	    else if (lexWithinMode(L_QUOTED_PRINTABLE)) {		p = lexGetQuotedPrintable();		}	    else {#ifdef _SUPPORT_LINE_FOLDING		p = lexGet1Value();#else		p = lexGetStrUntil(";\n");#endif		}	    if (p) {		DBG_(("db: STRING: '%s'\n", p));		yylval.str = p;		return STRING;		}	    else return 0;	    }    } else if (lexmode == L_PARAMWORD) {	yylval.str = lexGetParamWord();	return ID;    } else {	/* normal mode */	while (1) {	    int c = lexGetc();	    switch(c) {		case ':': {		    /* consume all line separator(s) adjacent to each other */		    /* ignoring linesep immediately after colon. */		    /* I don't see this in the spec, and it breaks null values -- WA		    c = lexLookahead();		    while (strchr("\n",c)) {			lexSkipLookahead();			c = lexLookahead();			++mime_lineNum;			}		    */		    DBG_(("db: COLON\n"));		    return COLON;		    }		case ';':		    DBG_(("db: SEMICOLON\n"));		    return SEMICOLON;		case '=':		    DBG_(("db: EQ\n"));		    return EQ;		/* ignore whitespace in this mode */		case '\t':		case ' ': continue;		case '\n': {		    ++mime_lineNum;		    continue;		    }		case EOF: return 0;		    break;		default: {		    lexPushLookaheadc(c);		    if (isalnum(c)) {			char *t = lexGetWord();			yylval.str = t;			if (!qstricmp(t, "begin")) {			    return match_begin_end_name(0);			    }			else if (!qstricmp(t,"end")) {			    return match_begin_end_name(1);			    }		        else {			    DBG_(("db: ID '%s'\n", t));			    return ID;			    }			}		    else {			/* unknow token */			return 0;			}		    break;		    }		}	    }	}    return 0;    }/***************************************************************************//***							Public Functions						****//***************************************************************************/static VObject* Parse_MIMEHelper()    {    ObjStackTop = -1;    mime_numErrors = 0;    mime_lineNum = 1;    vObjList = 0;    curObj = 0;    if (yyparse() != 0)	return 0;    finiLex();    return vObjList;    }/*--------------------------------------------*/DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len)    {    initLex(input, len, 0);    return Parse_MIMEHelper();    }#if INCLUDEMFCDLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file)    {    unsigned long startPos;    VObject *result;	    initLex(0,-1,file);    startPos = file->GetPosition();    if (!(result = Parse_MIMEHelper()))	file->Seek(startPos, CFile::begin);    return result;    }#elseVObject* Parse_MIME_FromFile(FILE *file)    {    VObject *result;	    long startPos;    initLex(0,(unsigned long)-1,file);    startPos = ftell(file);    if (!(result = Parse_MIMEHelper())) {	fseek(file,startPos,SEEK_SET);	}    return result;    }DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname)    {    FILE *fp = fopen(fname,"r");    if (fp) {	VObject* o = Parse_MIME_FromFile(fp);	fclose(fp);	return o;	}    else {	char msg[80];	sprintf(msg, "can't open file '%s' for reading\n", fname);	mime_error_(msg);	return 0;	}    }#endif/*-------------------------------------*/static MimeErrorHandler mimeErrorHandler;DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me)    {    mimeErrorHandler = me;    }void mime_error(char *s)    {    char msg[256];    if (mimeErrorHandler) {	sprintf(msg,"%s at line %d", s, mime_lineNum);	mimeErrorHandler(msg);	}    }void mime_error_(char *s)    {    if (mimeErrorHandler) {	mimeErrorHandler(s);	}    }#line 1265 "y.tab.c"#define YYABORT goto yyabort#define YYREJECT goto yyabort#define YYACCEPT goto yyaccept#define YYERROR goto yyerrlabint#if defined(__STDC__)yyparse(void)#elseyyparse()#endif{    register int yym, yyn, yystate;#if YYDEBUG    register char *yys;    extern char *getenv();    if (yys = getenv("YYDEBUG"))    {        yyn = *yys;        if (yyn >= '0' && yyn <= '9')            yydebug = yyn - '0';    }#endif    yynerrs = 0;    yyerrflag = 0;    yychar = (-1);    yyssp = yyss;    yyvsp = yyvs;    *yyssp = yystate = 0;yyloop:    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;    if (yychar < 0)    {        if ((yychar = yylex()) < 0) yychar = 0;#if YYDEBUG        if (yydebug)        {            yys = 0;            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];            if (!yys) yys = "illegal-symbol";            printf("%sdebug: state %d, reading %d (%s)\n",                    YYPREFIX, yystate, yychar, yys);        }#endif    }    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)    {#if YYDEBUG        if (yydebug)            printf("%sdebug: state %d, shifting to state %d\n",                    YYPREFIX, yystate, yytable[yyn]);#endif        if (yyssp >= yyss + yystacksize - 1)        {            goto yyoverflow;        }        *++yyssp = yystate = yytable[yyn];        *++yyvsp = yylval;        yychar = (-1);        if (yyerrflag > 0)  --yyerrflag;        goto yyloop;    }    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)    {        yyn = yytable[yyn];        goto yyreduce;    }    if (yyerrflag) goto yyinrecovery;    yyerror("syntax error");#ifdef lint    goto yyerrlab;#endifyyerrlab:    ++yynerrs;yyinrecovery:    if (yyerrflag < 3)    {        yyerrflag = 3;        for (;;)        {            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)            {#if YYDEBUG                if (yydebug)                    printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);#endif                if (yyssp >= yyss + yystacksize - 1)                {                    goto yyoverflow;                }                *++yyssp = yystate = yytable[yyn];                *++yyvsp = yylval;                goto yyloop;            }            else            {#if YYDEBUG                if (yydebug)                    printf("%sdebug: error recovery discarding state %d\n",                            YYPREFIX, *yyssp);#endif                if (yyssp <= yyss) goto yyabort;                --yyssp;                --yyvsp;            }        }    }    else    {        if (yychar == 0) goto yyabort;#if YYDEBUG        if (yydebug)        {            yys = 0;            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];            if (!yys) yys = "illegal-symbol";            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",                    YYPREFIX, yystate, yychar, yys);        }#endif        yychar = (-1);        goto yyloop;    }yyreduce:#if YYDEBUG    if (yydebug)        printf("%sdebug: state %d, reducing by rule %d (%s)\n",                YYPREFIX, yystate, yyn, yyrule[yyn]);#endif    yym = yylen[yyn];    yyval = yyvsp[1-yym];    switch (yyn)    {case 2:#line 223 "backend/vcc.y"{ addList(&vObjList, yyvsp[0].vobj); curObj = 0; }break;case 3:#line 225 "backend/vcc.y"{ addList(&vObjList, yyvsp[0].vobj); curObj = 0; }break;case 6:#line 234 "backend/vcc.y"{	lexPushMode(L_VCARD);	if (!pushVObject(VCCardProp)) YYERROR;	}break;case 7:#line 239 "backend/vcc.y"{	lexPopMode(0);	yyval.vobj = popVObject();	}break;case 8:#line 244 "backend/vcc.y"{	lexPushMode(L_VCARD);	if (!pushVObject(VCCardProp)) YYERROR;	}break;case 9:#line 249 "backend/vcc.y"{	lexPopMode(0);	yyval.vobj = popVObject();	}break;case 12:#line 260 "backend/vcc.y"{	lexPushMode(L_VALUES);	}break;case 13:#line 264 "backend/vcc.y"{	if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE))	   lexPopMode(0);	lexPopMode(0);	}break;case 15:#line 273 "backend/vcc.y"{	enterProps(yyvsp[0].str);	}break;case 17:#line 278 "backend/vcc.y"{	enterProps(yyvsp[0].str);	}break;case 21:#line 291 "backend/vcc.y"{	enterAttr(yyvsp[0].str,0);	}break;case 22:#line 295 "backend/vcc.y"{	lexPushMode(L_PARAMWORD);	}break;case 23:#line 299 "backend/vcc.y"{	lexPopMode(0);	enterAttr(yyvsp[-3].str,yyvsp[0].str);	}break;case 25:#line 308 "backend/vcc.y"{ enterValues(yyvsp[-1].str); }break;case 27:#line 310 "backend/vcc.y"{ enterValues(yyvsp[0].str); }break;case 29:#line 315 "backend/vcc.y"{ yyval.str = 0; }break;case 30:#line 320 "backend/vcc.y"{ if (!pushVObject(VCCalProp)) YYERROR; }break;case 31:#line 323 "backend/vcc.y"{ yyval.vobj = popVObject(); }break;case 32:#line 325 "backend/vcc.y"{ if (!pushVObject(VCCalProp)) YYERROR; }break;case 33:#line 327 "backend/vcc.y"{ yyval.vobj = popVObject(); }break;case 39:#line 342 "backend/vcc.y"{	lexPushMode(L_VEVENT);	if (!pushVObject(VCEventProp)) YYERROR;	}break;case 40:#line 348 "backend/vcc.y"{	lexPopMode(0);	popVObject();	}break;case 41:#line 353 "backend/vcc.y"{	lexPushMode(L_VEVENT);	if (!pushVObject(VCEventProp)) YYERROR;	}break;case 42:#line 358 "backend/vcc.y"{	lexPopMode(0);	popVObject();	}break;case 43:#line 366 "backend/vcc.y"{	lexPushMode(L_VTODO);	if (!pushVObject(VCTodoProp)) YYERROR;	}break;case 44:#line 372 "backend/vcc.y"{	lexPopMode(0);	popVObject();	}break;case 45:#line 377 "backend/vcc.y"{	lexPushMode(L_VTODO);	if (!pushVObject(VCTodoProp)) YYERROR;	}break;case 46:#line 382 "backend/vcc.y"{	lexPopMode(0);	popVObject();	}break;#line 1571 "y.tab.c"    }    yyssp -= yym;    yystate = *yyssp;    yyvsp -= yym;    yym = yylhs[yyn];    if (yystate == 0 && yym == 0)    {#if YYDEBUG        if (yydebug)            printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL);#endif        yystate = YYFINAL;        *++yyssp = YYFINAL;        *++yyvsp = yyval;        if (yychar < 0)        {            if ((yychar = yylex()) < 0) yychar = 0;#if YYDEBUG            if (yydebug)            {                yys = 0;                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];                if (!yys) yys = "illegal-symbol";                printf("%sdebug: state %d, reading %d (%s)\n",                        YYPREFIX, YYFINAL, yychar, yys);            }#endif        }        if (yychar == 0) goto yyaccept;        goto yyloop;    }    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)        yystate = yytable[yyn];    else        yystate = yydgoto[yym];#if YYDEBUG    if (yydebug)        printf("%sdebug: after reduction, shifting from state %d \to state %d\n", YYPREFIX, *yyssp, yystate);#endif    if (yyssp >= yyss + yystacksize - 1)    {        goto yyoverflow;    }    *++yyssp = yystate;    *++yyvsp = yyval;    goto yyloop;yyoverflow:    yyerror("yacc stack overflow");yyabort:    return (1);yyaccept:    return (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -