Previous: Token Positions, Up: Lexical [Contents][Index]
½ã¿è¤Ê¡¢¤Ä¤Þ¤êºÆÆþ²Äǽ¤Ê¡¢¹½Ê¸²òÀÏ´ï¤òÀ¸À®¤¹¤ë¤¿¤á¤Ë¡¢
%pure_parser
¤òBisonÀë¸À¤¹¤ë¤È¡¢¹°èÊÑ¿ôyylval
¤È
yylloc
¤ò»È¤¨¤Ê¤¯¤Ê¤ê¤Þ¤¹
¡Êsee A Pure (Reentrant) Parser¡Ë¡£
¤³¤Î¤è¤¦¤Ê¹½Ê¸²òÀÏ´ï¤Ç¤Ï¡¢2¤Ä¤Î¹°èÊÑ¿ô¤ÎÂå¤ï¤ê¤Ë¡¢
yylex
¤Ø¤Î°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤ë¥Ý¥¤¥ó¥¿¤ò»È¤¤¤Þ¤¹¡£
yylex
¤ò¼¡¤Î¤è¤¦¤ËÀë¸À¤·¡¢
¤³¤ì¤é¤Î¥Ý¥¤¥ó¥¿¤òÄ̤·¤Æ¾ðÊó¤ò¼õ¤±ÅϤ·¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
yylex (lvalp, llocp) YYSTYPE *lvalp; YYLTYPE *llocp; { … *lvalp = value; /* ÃͤòBison¥¹¥¿¥Ã¥¯¤ËÀѤࡣ */ return INT; /* ¥È¡¼¥¯¥ó·¿¤òÊÖ¤¹¡£ */ … }
ʸˡ¥Õ¥¡¥¤¥ë¤¬¥Æ¥¥¹¥ÈÃæ¤Î°ÌÃÖ¤ò»²¾È¤¹¤ë¤¿¤á¤Î‘@’µ¡Ç½¤ò
»È¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢YYLTYPE
¤ÏÄêµÁ¤µ¤ì¤Þ¤»¤ó¡£
¤³¤Î¾ì¹ç¡¢Âè2°ú¿ô¤ò¾Êά¤·¡¢yylex
¤Ï
1¸Ä¤Î°ú¿ô¤ò¤È¤â¤Ê¤Ã¤Æ¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
ºÆÆþ²Äǽ¤Ê¹½Ê¸²òÀÏ´ï¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢
ºÆÆþ²Äǽ¤ÊÊýË¡¤Ç¹½Ê¸²òÀÏ´ï¤ËÄɲäΰú¿ô¤òÅϤ¹ÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¤Ë¤Ï¡¢¥Þ¥¯¥íYYPARSE_PARAM
¤òÊÑ¿ô̾¤È¤·¤ÆÄêµÁ¤·¤Þ¤¹¡£
¤¹¤ë¤È¡¢´Ø¿ôyyparse
¤Ï¡¢ÄêµÁ¤µ¤ì¤¿Ì¾Á°¤Ç¡¢·¿¤¬void *
¤Î
Äɲäΰú¿ô¤ò¼õ¤±¼è¤ê¤Þ¤¹¡£
yyparse
¤ò¸Æ¤Ó½Ð¤¹¤È¤¤Ë¡¢¥ª¥Ö¥¸¥§¥¯¥È¤ÎÈÖÃϤò
void *
·¿¤Ë¥¥ã¥¹¥È¤·¤ÆÅϤ·¤Þ¤¹¡£
ʸˡ¤Î¥¢¥¯¥·¥ç¥ó¤Ï¡¢¥Ý¥¤¥ó¥¿¤òŬÀڤʷ¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ø¥¥ã¥¹¥È¤·¡¢
µÕ»²¾È¤·¤Æ¡¢¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆâÍÆ¤ò»²¾È¤Ç¤¤Þ¤¹¡£
Îã¤ò¼¨¤·¤Þ¤¹¡£
%{ struct parser_control { int nastiness; int randomness; }; #define YYPARSE_PARAM parm %}
¼¡¤Î¤è¤¦¤Ë¹½Ê¸²òÀÏ´ï¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
struct parser_control
{
int nastiness;
int randomness;
};
…
{
struct parser_control foo;
… /* foo
¤ËÀµ¤·¤¤¥Ç¡¼¥¿¤òµ²± */
value = yyparse ((void *) &foo);
…
}
ʸˡ¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤Ç¤Ï¡¢¥Ç¡¼¥¿¤ò»²¾È¤¹¤ë¤¿¤á¤Ë¼¡¤Î¤è¤¦¤Ê¼°¤ò»È¤¤¤Þ¤¹¡£
((struct parser_control *) parm)->randomness
yylex
¤ËÄɲäΰú¿ô¤òÅϤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢
YYPARSE_PARAM
¤ÈƱÍͤˡ¢¥Þ¥¯¥íYYLEX_PARAM
¤òÄêµÁ¤·¤Þ¤¹¡£
Îã¤ò¼¨¤·¤Þ¤¹¡£
%{ struct parser_control { int nastiness; int randomness; }; #define YYPARSE_PARAM parm #define YYLEX_PARAM parm %}
¤½¤·¤Æ¡¢yylex
¤¬Äɲäΰú¿ô¡¢parm
¤ÎÃͤò¼õ¤±¼è¤ë¤è¤¦¤Ë¡¢
yylex
¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹
¡Ê·¿YYLTYPE
¤Î¤É¤Î°ú¿ô¤¬ÅϤµ¤ì¤ë¤«¤Ë±þ¤¸¤Æ¡¢
°ú¿ô¤Î¹ç·×¤¬2¸Ä¤Þ¤¿¤Ï3¸Ä¤Ë¤Ê¤ê¤Þ¤¹¡Ë¡£
°ú¿ô¤òÀµ¤·¤¤¥ª¥Ö¥¸¥§¥¯¥È·¿¤È¤·¤ÆÀë¸À¤Ç¤¤Þ¤¹¡£¤¹¤Ê¤ï¤Ávoid *
¤È¤·¤Æ
Àë¸À¤·¡¢¾åµ¤ÎÈÖÃϤò»²¾È¤Ç¤¤Þ¤¹¡£
YYPARSE_PARAM
¤ò»È¤ï¤º¤Ë¡¢‘%pure_parser’¤ò»È¤Ã¤Æ¡¢
ºÆÆþ²Äǽ¤Ê¹½Ê¸²òÀÏ´ï¤òÀ¸À®¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
¤½¤Î¾ì¹ç¡¢°ú¿ô¤ò¤Ä¤±¤º¤Ëyyparse
¤ò¸Æ¤Ó½Ð¤¹¤Ù¤¤Ç¤¹¡£