您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > ANSI+C+grammar
1/15ANSICgrammar,LexspecificationIn1985,JeffLeepublishedthisLexspecificationtogetherwithaYaccgrammarfortheApril30,1985ANSICdraft.TomStockfischrepostedbothtonet.sourcesin1987;thatoriginal,asmentionedintheanswertoquestion17.25ofthecomp.lang.cFAQ,canbeftp'edfromftp.uu.net,fileusenet/net.sources/ansi.c.grammar.Z.IintendtokeepthisversionasclosetothecurrentCStandardgrammaraspossible;pleaseletmeknowifyoudiscoverdiscrepancies.JuttaDegener,1995D[0-9]L[a-zA-Z_]H[a-fA-F0-9]E[Ee][+-]?{D}+FS(f|F|l|L)IS(u|U|l|L)*%{#includestdio.h#includey.tab.hvoidcount();%}%%/*{comment();}auto{count();return(AUTO);}break{count();return(BREAK);}case{count();return(CASE);}char{count();return(CHAR);}const{count();return(CONST);}continue{count();return(CONTINUE);}default{count();return(DEFAULT);}do{count();return(DO);}double{count();return(DOUBLE);}else{count();return(ELSE);}enum{count();return(ENUM);}extern{count();return(EXTERN);}float{count();return(FLOAT);}2/15for{count();return(FOR);}goto{count();return(GOTO);}if{count();return(IF);}int{count();return(INT);}long{count();return(LONG);}register{count();return(REGISTER);}return{count();return(RETURN);}short{count();return(SHORT);}signed{count();return(SIGNED);}sizeof{count();return(SIZEOF);}static{count();return(STATIC);}struct{count();return(STRUCT);}switch{count();return(SWITCH);}typedef{count();return(TYPEDEF);}union{count();return(UNION);}unsigned{count();return(UNSIGNED);}void{count();return(VOID);}volatile{count();return(VOLATILE);}while{count();return(WHILE);}{L}({L}|{D})*{count();return(check_type());}0[xX]{H}+{IS}?{count();return(CONSTANT);}0{D}+{IS}?{count();return(CONSTANT);}{D}+{IS}?{count();return(CONSTANT);}L?'(\\.|[^\\'])+'{count();return(CONSTANT);}{D}+{E}{FS}?{count();return(CONSTANT);}{D}*.{D}+({E})?{FS}?{count();return(CONSTANT);}{D}+.{D}*({E})?{FS}?{count();return(CONSTANT);}L?\(\\.|[^\\])*\{count();return(STRING_LITERAL);}...{count();return(ELLIPSIS);}={count();return(RIGHT_ASSIGN);}={count();return(LEFT_ASSIGN);}+={count();return(ADD_ASSIGN);}-={count();return(SUB_ASSIGN);}*={count();return(MUL_ASSIGN);}/={count();return(DIV_ASSIGN);}%={count();return(MOD_ASSIGN);}&={count();return(AND_ASSIGN);}^={count();return(XOR_ASSIGN);}|={count();return(OR_ASSIGN);}3/15{count();return(RIGHT_OP);}{count();return(LEFT_OP);}++{count();return(INC_OP);}--{count();return(DEC_OP);}-{count();return(PTR_OP);}&&{count();return(AND_OP);}||{count();return(OR_OP);}={count();return(LE_OP);}={count();return(GE_OP);}=={count();return(EQ_OP);}!={count();return(NE_OP);};{count();return(';');}({|%){count();return('{');}(}|%){count();return('}');},{count();return(',');}:{count();return(':');}={count();return('=');}({count();return('(');}){count();return(')');}([|:){count();return('[');}(]|:){count();return(']');}.{count();return('.');}&{count();return('&');}!{count();return('!');}~{count();return('~');}-{count();return('-');}+{count();return('+');}*{count();return('*');}/{count();return('/');}%{count();return('%');}{count();return('');}{count();return('');}^{count();return('^');}|{count();return('|');}?{count();return('?');}[\t\v\n\f]{count();}.{/*ignorebadcharacters*/}%%yywrap(){return(1);4/15}comment(){charc,c1;loop:while((c=input())!='*'&&c!=0)putchar(c);if((c1=input())!='/'&&c!=0){unput(c1);gotoloop;}if(c!=0)putchar(c1);}intcolumn=0;voidcount(){inti;for(i=0;yytext[i]!='\0';i++)if(yytext[i]=='\n')column=0;elseif(yytext[i]=='\t')column+=8-(column%8);elsecolumn++;ECHO;}intcheck_type(){/**pseudocode---thisiswhatitshouldcheck5/15**if(yytext==type_name)*return(TYPE_NAME);**return(IDENTIFIER);*//**itactuallywillonlyreturnIDENTIFIER*/return(IDENTIFIER);}ANSICYaccgrammarIn1985,JeffLeepublishedhisYaccgrammar(whichisaccompaniedbyamatchingLexspecification)fortheApril30,1985draftversionoftheANSICstandard.TomStockfischrepostedittonet.sourcesin1987;thatoriginal,asmentionedintheanswertoquestion17.25ofthecomp.lang.cFAQ,canbeftp'edfromftp.uu.net,fileusenet/net.sources/ansi.c.grammar.Z.JuttaDegener,1995%tokenIDENTIFIERCONSTANTSTRING_LITERALSIZEOF%tokenPTR_OPINC_OPDEC_OPLEFT_OPRIGHT_OPLE_OPGE_OPEQ_OPNE_OP%tokenAND_OPOR_OPMUL_ASSIGNDIV_ASSIGNMOD_ASSIGNADD_ASSIGN%tokenSUB_ASSIGNLEFT_ASSIGNRIGHT_ASSIGNAND_ASSIGN%tokenXOR_ASSIGNOR_ASSIGNTYPE_NAME%tokenTYPEDEFEXTERNSTATICAUTOREGISTER%tokenCHARSHORTINTLONGSIGNEDUNSIGNEDFLOATDOUBLECONSTVOLATILEVOID%tokenSTRUCTUNIONENUMELLIPSIS%tokenCASEDEFAULTIFELSESWITCHWHILEDOFORGOTOCONTINUEBREAKRETURN%starttranslation_unit%%6/15primary_expression:IDENTIFIER|CONSTANT|STRING_LITERAL|'('expression')';postfix_expression:primary_expression|postfix_expression'['expression']'|postfix_expression'('')'|postfix_expression'('argument_expression_list')'|postfix_expression'.'IDENTIFIER|postfix_expressionPTR_OPIDENTIFIER|postfix_expressionINC_OP|postfix_expressionDEC_OP;argument_expression_list:assignment_expression|argument_expression_list','assignment_expression;unary_expression:postfix_expression|INC_OPunary_expression|DEC_OPunary_expression|unary_operatorcast_expression|SI
本文标题:ANSI+C+grammar
链接地址:https://www.777doc.com/doc-1084724 .html