LEX (1131541), страница 4
Текст из файла (страница 4)
/*ॣã«ïàë¥ ®¯à¥¤¥«¥¨ï*/
delim [ \t\n]
ws {delim}+
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)?
%%
{ws} {/* ¤¥©á⢨© ¨ ¢®§¢à â ¥â */}
if {return(IF);}
then {return(THEN);}
else {return(ELSE);}
{id} {yylval=install_id(); return(ID);}
{number} {yylval=install_num(); return(NUMBER);}
"<" {yylval=LT; return(RELOP);}
"<=" {yylval=LE; return(RELOP);}
"=" {yylval=EQ; return(RELOP);}
"<>" {yylval=NE; return(RELOP);}
">" {yylval=GT; return(RELOP);}
">=" {yylval=GE; return(RELOP);}
%%
install_id(){/*¯à®æ¥¤ãà , ª®â®à ï ¯®¬¥é ¥â «¥ªá¥¬ã,
¯¥à¢ë© ᨬ¢®« ª®â®à®© 㪠§ë¢ ¥â yytext,
¤«¨ ª®â®à®© à ¢ yyleng, ¢ â ¡«¨æã
ᨬ¢®«®¢ ¨ ¢®§¢à é ¥â 㪠§ â¥«ì ¥¥*/
}
install_num(){/* «®£¨ç ï ¯à®æ¥¤ãà ¤«ï à §¬¥é¥¨ï
«¥ªá¥¬ë ç¨á« */
}
�¨á. 2.16.
‚ à §¤¥«¥ ®¡ê¥¨©, § ª«î祮¬ ¢ ᪮¡ª¨ %{ ¨ %}, ¯¥à¥ç¨á«¥ë ª®áâ âë, ¨á¯®«ì§ã¥¬ë¥ ¯à ¢¨« ¬¨ âà á«ï樨. ‚á¥, çâ® § ª«î祮 ¢ í⨠᪮¡ª¨, ¥¯®á।á⢥® ª®¯¨àã¥âáï ¢ ¯à®£à ¬¬ã «¥ªá¨ç¥áª®£® «¨§ â®à lex.yy.c ¨ ¥ à áᬠâਢ ¥âáï ª ª ç áâì ॣã«ïàëå ®¯à¥¤¥«¥¨© ¨«¨ ¯à ¢¨« âà á«ï樨. ’® ¦¥ ª á ¥âáï ¨ ¢á¯®¬®£ ⥫ìëå ¯à®æ¥¤ãà âà¥â쥩 ᥪ樨. � à¨á. 2.16 íâ® ¯à®æ¥¤ãàë install_id ¨ install_num.
‚ ᥪæ¨î ®¯à¥¤¥«¥¨© ¢å®¤ïâ â ª¦¥ ¥ª®â®àë¥ à¥£ã«ïàë¥ ®¯à¥¤¥«¥¨ï. Š ¦¤®¥ â ª®¥ ®¯à¥¤¥«¥¨¥ á®á⮨⠨§ ¨¬¥¨ ¨ ॣã«ïண® ¢ëà ¦¥¨ï, ®¡®§ ç ¥¬®£® í⨬ ¨¬¥¥¬. � ¯à¨¬¥à, ¯¥à¢®¥ ®¯à¥¤¥«¥®¥ ¨¬ï - íâ® delim. Ž® ®¡®§ ç ¥â ª« áá ᨬ¢®«®¢ { \t\n}, â.¥. «î¡®© ¨§ âà¥å ᨬ¢®«®¢: ¯à®¡¥«, â ¡ã«ïæ¨ï ¨«¨ ®¢ ï áâப . ‚â®à®¥ ®¯à¥¤¥«¥¨¥ - à §¤¥«¨â¥«ì, ®¡®§ ç ¥¬ë© ¨¬¥¥¬ ws. � §¤¥«¨â¥«ì - íâ® «î¡ ï ¯®á«¥¤®¢ ⥫ì®áâì ®¤®£® ¨«¨ ¡®«¥¥ ᨬ¢®«®¢-à §¤¥«¨â¥«¥©. ‘«®¢® delim ¤®«¦® ¡ëâì § ª«î祮 ¢ ᪮¡ª¨, çâ®¡ë ®â«¨ç¨âì ¥£® ®â ®¡à §æ , á®áâ®ï饣® ¨§ ¯ï⨠ᨬ¢®«®¢ delim.
‚ ®¯à¥¤¥«¥¨¨ letter ¨á¯®«ì§ã¥âáï ª« áá ᨬ¢®«®¢. ‘®ªà 饨¥ [A-Za-z] ®§ ç ¥â «î¡ãî ¨§ ¯à®¯¨áëå ¡ãª¢ ®â A ¤® Z ¨«¨ áâà®çëå ¡ãª¢ ®â a ¤® z. ‚ ¯ï⮬ ®¯à¥¤¥«¥¨¨ ¤«ï id ¤«ï £à㯯¨à®¢ª¨ ¨á¯®«ì§ãîâáï ᪮¡ª¨, ïî騥áï ¬¥â ᨬ¢®« ¬¨ LEX. € «®£¨ç®, ¢¥à⨪ «ì ï ç¥àâ - ¬¥â ᨬ¢®« LEX, ®¡®§ ç î騩 ®¡ê¥¤¨¥¨¥.
‚ ¯®á«¥¤¥¬ ॣã«ï஬ ®¯à¥¤¥«¥¨¨ number ᨬ¢®« '+' ¨á¯®«ì§ã¥âáï ª ª ¬¥â ᨬ¢®« "®¤® ¨«¨ ¡®«¥¥ ¢å®¦¤¥¨©", ᨬ¢®« '?' ª ª ¬¥â ᨬ¢®« "®«ì ¨«¨ ®¤® ¢å®¦¤¥¨¥". Ž¡à â ï ç¥à⠨ᯮ«ì§ã¥âáï ¤«ï ⮣®, çâ®¡ë ¯à¨¤ âì ®¡ëçë© á¬ë᫠ᨬ¢®«ã, ¨á¯®«ì§ãî饬ãáï ¢ LEX ª ª ¬¥â ᨬ¢®«. ‚ ç áâ®áâ¨, ¤¥áïâ¨ç ï â®çª ¢ ®¯à¥¤¥«¥¨¨ number ®¡®§ ç ¥âáï ª ª '\.', ¯®áª®«ìªã â®çª á ¬ ¯® ᥡ¥ ¯à¥¤áâ ¢«ï¥â ª« áá, á®áâ®ï騩 ¨§ ¢á¥å ᨬ¢®«®¢, § ¨áª«î票¥¬ ᨬ¢®« ®¢®© áâப¨. ‚ ª« ááe ᨬ¢®«®¢ [+\-] ®¡à â ï ç¥àâ ¯¥à¥¤ ¬¨ãᮬ á⮨⠯®â®¬ã, çâ® § ª ¬¨ãá ¨á¯®«ì§ã¥âáï ª ª ᨬ¢®« ¤¨ ¯ §® , ª ª ¢ [A-Z].
…᫨ ᨬ¢®« ¨¬¥¥â á¬ëá« ¬¥â ᨬ¢®« , â® ¯à¨¤ âì ¥¬ã ®¡ëçë© á¢ëá« ¬®¦® ¨ ¯®-¤à㣮¬ã, § ª«î稢 ¥£® ¢ ª ¢ë窨. ’ ª, ¢ ᥪ樨 ¯à ¢¨« âà á«ï樨 è¥áâì ®¯¥à 権 ®â®è¥¨ï § ª«îç¥ë ¢ ª ¢ë窨.
� áᬮâਬ ¯à ¢¨« âà á«ï樨, á«¥¤ãî騥 § ¯¥à¢ë¬ %%. ‘®£« á® ¯¥à¢®¬ã ¯à ¢¨«ã, ¥á«¨ ®¡ à㦥® ws, â.¥. ¬ ªá¨¬ «ì ï ¯®á«¥¤®¢ ⥫ì®áâì ¯à®¡¥«®¢, â ¡ã«ï権 ¨ ®¢ëå áâப, ¨ª ª¨å ¤¥©á⢨© ¥ ¯à®¨§¢®¤¨âáï. ‚ ç áâ®áâ¨, ¥ ®áãé¥á⢫ï¥âáï ¢®§¢à â ¢ á¨â ªá¨ç¥áª¨© «¨§ â®à.
‘®£« á® ¢â®à®¬ã ¯à ¢¨«ã, ¥á«¨ ®¡ à㦥 ¯®á«¥¤®¢ ⥫ì®áâì ¡ãª¢ 'if', 㦮 ¢¥àãâì § 票¥ IF, ª®â®à®¥ ®¯à¥¤¥«¥® ª ª 楫 ï ª®áâ â , ¯®¨¬ ¥¬ ï á¨â ªá¨ç¥áª¨¬ «¨§ â®à®¬ ª ª «¥ªá¥¬ 'if'. € «®£¨ç® ®¡à ¡ âë¢ îâáï ª«îç¥¢ë¥ á«®¢ 'then' ¨ 'else' ¢ ¤¢ãå á«¥¤ãé¨å ¯à ¢¨« å.
‚ ¤¥©á⢨¨, á¢ï§ ®¬ á ¯à ¢¨«®¬ ¤«ï id, ¤¢ ®¯¥à â®à . �¥à¥¬¥®© yylval ¯à¨á¢ ¨¢ ¥âáï § 票¥, ¢®§¢à é ¥¬®¥ ¯à®æ¥¤ãன install_id. Ž¯à¥¤¥«¥¨¥ í⮩ ¯à®æ¥¤ãàë ¯à¨¢¥¤¥® ¢ à §¤¥«¥ 3.1. �¥à¥¬¥ ï yylval ®¯à¥¤¥«¥ ¢ ¯à®£à ¬¬¥ lex.yy.c, ¢ë室¥ LEX, ¨ ® ¤®áâ㯠á¨â ªá¨ç¥áª®¬ã «¨§ â®àã. yylval åà ¨â ¢®§¢à é ¥¬®¥ «¥ªá¨ç¥áª®¥ § 票¥, ¯®áª®«ìªã ¢â®à®© ®¯¥à â®à ¢ ¤¥©á⢨¨, return(ID), ¬®¦¥â ⮫쪮 ¢®§¢à â¨âì ª®¤ ª« áá «¥ªá¥¬.
”ãªæ¨ï install_id § ®á¨â ¨¤¥â¨ä¨ª â®àë ¢ â ¡«¨æã ᨬ¢®«®¢. ’¥ªãé ï «¥ªá¥¬ ¤®áâ㯠¡« £®¤ àï ¤¢ã¬ 㪠§ ⥫ï¬: yytext ¨ yyleng. �¥à¥¬¥ ï yytext - í⮠㪠§ â¥«ì ¯¥à¢ë© ᨬ¢®« «¥ªá¥¬ë, yyleng - í⮠楫®¥, ¤ î饥 ¤«¨ã «¥ªá¥¬ë. � ¯à¨¬¥à, ¯à¨ § ¥á¥¨¨ ¨¤¥â¨ä¨ª â®à ¢ â ¡«¨æã ¬®£ãâ ¡ëâì ᪮¯¨à®¢ ë yyleng ᨬ¢®«®¢, ç¨ ï á yytext.
€ «®£¨ç® ®¡à ¡ âë¢ îâáï ç¨á« ¢ á«¥¤ãî饬 ¯à ¢¨«¥. ‚ ¯®á«¥¤¨å è¥á⨠¯à ¢¨« å yylval ¨á¯®«ì§ã¥âáï ¤«ï ¢®§¢à â ª®¤ ®¯¥à 樨 ®â®è¥¨ï, ¢®§¢à é ¥¬®¥ ¦¥ äãªæ¨¥© § 票¥ - íâ® ª®¤ «¥ªá¥¬ë relop.
…᫨, ¯à¨¬¥à, ¢ ⥪ã騩 ¬®¬¥â «¥ªá¨ç¥áª¨© «¨§ â®à ®¡à ¡ âë¢ ¥â «¥ªá¥¬ã 'if', â® í⮩ «¥ªá¥¬¥ ᮮ⢥âáâ¢ãîâ ¤¢ ®¡à §æ : 'if' ¨ {id} ¨ ¡®«¥¥ ¤«¨®© áâப¨, ᮮ⢥âáâ¢ãî饩 ®¡à §æã, ¥â. �®áª®«ìªã ®¡à §¥æ 'if' ¯à¥¤è¥áâ¢ã¥â ®¡à §æã ¤«ï ¨¤¥â¨ä¨ª â®à , ª®ä«¨ªâ à §à¥è ¥âáï ¢ ¯®«ì§ã ª«î祢®£® á«®¢ . ’ ª ï áâà ⥣¨ï à §à¥è¥¨ï ª®ä«¨ªâ®¢ ¯®§¢®«ï¥â «¥£ª® १¥à¢¨à®¢ âì ª«îç¥¢ë¥ á«®¢ .
…᫨ ¢å®¤¥ ¢áâà¥ç ¥âáï '<=', â® ¯¥à¢®¬ã ᨬ¢®«ã ᮮ⢥âáâ¢ã¥â ®¡à §¥æ '<', ® íâ® ¥ á ¬ë© ¤«¨ë© ®¡à §¥æ, ª®â®àë© á®®â¢¥âáâ¢ã¥â ¯à¥ä¨ªá㠢室 . ‘âà ⥣¨ï ¢ë¡®à á ¬®£® ¤«¨®£® ¯à¥ä¨ªá «¥£ª® à §à¥è ¥â â ª®£® த ª®ä«¨ªâë.















