Next: Start State Example, Previous: Start State Notes, Up: Start States [Contents][Index]
Flex 2.5¤Ç¤Ï¡¢ °Ê²¼¤Î¿·µ¡Ç½¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¥¹¥¿¡¼¥È¾õÂÖ‘<*>’¤Ë¤ÏÆÃ¼ì¤Ê°ÕÌ£¤¬¤¢¤ê¡¢ ¤¹¤Ù¤Æ¤Î¥¹¥¿¡¼¥È¾õÂ֤˥ޥåÁ¤·¤Þ¤¹¡£
Î㤨¤Ð¡¢
%x state1
%%
<state1>"one" printf("two");
<*>"three" printf("four");
¤Ï¡¢
%s state1
%%
<state1>"one" printf("two");
"three" printf("four");
¤ÈƱ¤¸°ÕÌ£¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Þ¥¯¥íYY_START¤Ë¤è¤ê¡¢
¥«¥ì¥ó¥È¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤ò»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
Á°Àá¡ÊStart State Notes¡Ë¤Î¡Ö¥¹¥¿¡¼¥È¾õÂÖ¤Î̾Á°¡×¤Ë¼¨¤·¤¿Îã¤Ç¤Ï¡¢
¥«¥ì¥ó¥È¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤òÇÛÎólast_state¤Ë³ÊǼ¤¹¤ë½èÍý¤ò¡¢
°Ê²¼¤Î¤è¤¦¤Ëµ½Ò¤·¤Æ¤¤¤Þ¤¹¤¬¡¢
FOO {
last_state[state_count] = FOO;
…
}
¤³¤ÎÂåÆþ¤Ï¡¢
last_state[state_count] = YY_START;
¤Î¤è¤¦¤Ë½ñ¤´¹¤¨¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
Lex¤È¤Î¸ß´¹À¤Î¤¿¤á¤Ë¡¢
YYSTATE¤¬¡¢
YY_START¤ÎÊÌ̾¤È¤·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤òÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤³¤ì¤Ë¤è¤ê¡¢ Ʊ¤¸¥¹¥¿¡¼¥È¾õÂ֤ˤª¤¤¤ÆÊ£¿ô¤Î¥ë¡¼¥ë¤¬Â¸ºß¤¹¤ë»þ¤Ë¡¢ ¤½¤Î¸Ä¡¹¤Î¥ë¡¼¥ë¤Ë¥¹¥¿¡¼¥È¾õÂÖ¤ò»ØÄꤹ¤ëɬÍפ¬¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤Î·Á¼°¤Ï¡¢ °Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£
<start_states>{
…
}
¤³¤³¤Ç¡¢ start_states¤Ï¡¢ ñ°ì¤Î¥¹¥¿¡¼¥È¾õÂÖ¡¢ ¤Þ¤¿¤Ï¡¢ ¥«¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¥¹¥¿¡¼¥È¾õÂ֤Υꥹ¥È¤Ç¤¹¡£ ¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤Î¶³¦¤Ï¡¢ ‘{’¤È‘}’¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤Þ¤¹¡£ ¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤òÆþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
Activating States¤Ë¼¨¤·¤¿Îã¤ò¡¢ ¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤ò»È¤Ã¤Æ½ñ¤Ä¾¤¹¤È¡¢ °Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
%x COMMENT
%%
"{" BEGIN(COMMENT);
<COMMENT>{
"$R"
"$I"
"$M"
…
"}" BEGIN(INITIAL);
}
¥¹¥¥ã¥ÊÄêµÁ¥Õ¥¡¥¤¥ë¤Ç‘%option stack’¤ò»ØÄꤹ¤ë¤È¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤òÍøÍѤǤ¤Þ¤¹¡£ ¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤òÁàºî¤¹¤ë¤¿¤á¤Ë¡¢ °Ê²¼¤Î´Ø¿ô¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£
void yy_push_state(int new_state)¥«¥ì¥ó¥È¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤ò¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤Ë¥×¥Ã¥·¥å¤·¡¢ new_state¾õÂÖ¤ËÁ«°Ü¤·¤Þ¤¹¡£
void yy_pop_state()¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤«¤é¥¹¥¿¡¼¥È¾õÂÖ¤ò¥Ý¥Ã¥×¤·¡¢ ¤½¤Î¥Ý¥Ã¥×¤µ¤ì¤¿¥¹¥¿¡¼¥È¾õÂÖ¤ËÁ«°Ü¤·¤Þ¤¹¡£
int yy_top_state()¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤ÎÀèÆ¬¤Ë¤¢¤ë¥¹¥¿¡¼¥È¾õÂÖ¤òÊÖ¤·¤Þ¤¹ ¡Ê¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤ÎÆâÍÆ¤ÏÊѹ¹¤µ¤ì¤Þ¤»¤ó¡Ë¡£
Á°Àá¡ÊStart State Notes¡Ë¤Î¡Ö¥¹¥¿¡¼¥È¾õÂÖ¤Î̾Á°¡×¤Ë¼¨¤·¤¿Îã¤ò¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤ò»È¤Ã¤Æ½ñ¤Ä¾¤¹¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
%option stack
%x FOO BAR baz
%%
FOO {
yy_push_state(baz);
}
BAR {
yy_push_state(baz);
}
<baz>rule 1
…
<baz>rule n
<baz>END {
yy_pop_state();
}