Next: , Previous: Program variables, Up: Programs   [Contents][Index]


7.8 Yacc¤ÈLex¤Î¥µ¥Ý¡¼¥È

Automake¤ÏYacc¤ÈLex¤ËÂФ·¤Æ´öʬÆÃ°Û¤Ê¥µ¥Ý¡¼¥È¤ò¹Ô¤Ê¤¤¤Þ¤¹¡¥

Automake¤Ï¡¤yacc(¤¢¤ë¤¤¤Ïlex)¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤¿.c ¥Õ¥¡¥¤¥ë¤¬¡¤ÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¥Ù¡¼¥¹Ì¾¤ò»ÈÍѤ·¤ÆÌ¿Ì¾¤µ¤ì¤Æ¤¤¤ë¤È²¾Äꤷ¤Þ¤¹¡¥ ¤¹¤Ê¤ï¤Á¡¤yacc¥½¡¼¥¹¥Õ¥¡¥¤¥ëfoo.y¤ËÂФ·¤Æ¡¤Automake¤ÏÃæ´Ö¥Õ¥¡¥¤ ¥ë¤ò(¤è¤êÅÁÅýŪ¤Êy.tab.c¤Ç¤Ï¤Ê¤¯)foo.c¤È̿̾¤·¤Þ¤¹¡¥

yacc¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ï¡¤·ë²Ì¤È¤·¤ÆÀ¸¤¸¤ë‘C’¤¢¤ë¤¤¤Ï ‘C++’ ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ò·èÄꤹ¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡¥¥Õ¥¡¥¤¥ë¤Î³È Ä¥»Ò¤¬‘.y’¤Î¾ì¹ç¤Ï‘.c’¤Ë¤Ê¤ê¤Þ¤¹¡¥Æ±Íͤˑ.yy’¤Ï ‘.cc’¤Ë¡¤‘.y++’¤Ï‘c++’¤Ë¡¤¤½¤·¤Æ‘.yxx’¤Ï ‘.cxx’¤Ë¤Ê¤ê¤Þ¤¹¡¥

ƱÍͤˡ¤lex¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï¡¤‘C’¤ä‘C++’¤òÀ¸À®¤¹¤ë¤¿¤á¤Ë»ÈÍÑ ¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥³ÈÄ¥»Ò¤Î‘.l’¡¤‘.ll’¡¤‘.l++’¡¤¤½¤·¤Æ ‘.lxx’¤¬Ç§¼±¤µ¤ì¤Þ¤¹¡¥

¤¢¤é¤æ¤ë‘SOURCES’ÊÑ¿ô¤Ë¡¤(‘C’¤ä‘C++’¤Î)Ãæ´ÖŪ¤Ê¥Õ¥¡¥¤¥ë ¤òÌÀ¼¨Åª¤Ë½ñ¤¤¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡¥¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤À¤±¤ò¥ê¥¹¥È¥¢¥Ã¥×¤·¤Þ¤¹¡¥

yacc(¤¢¤ë¤¤¤Ïlex)¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ëÃæ´ÖŪ¤Ê¥Õ¥¡¥¤¥ë¤Ï¡¤ºî À®¤µ¤ì¤ë¤¹¤Ù¤Æ¤ÎÇÛÉÛʪ¤Ë´Þ¤á¤é¤ì¤Þ¤¹¡¥¤½¤Î¤¿¤á¥æ¡¼¥¶¤¬yacc¤ä lex¤ò»ý¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤»¤ó¡¥

yacc¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¤configure.ac¤ÇÊÑ¿ô ‘YACC’¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥¤³¤ì¤Ï¡¤¥Þ¥¯¥í‘AC_PROG_YACC’ ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤ÇºÇ¤âÍÆ°×¤Ë¹Ô¤Ê¤¨¤Þ¤¹(see Particular Program Checks in The Autoconf Manual)¡¥

yacc¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿»þ¡¤‘YFLAGS’¤È‘AM_YFLAGS’¥Õ¥é¥°¤¬ÅÏ ¤µ¤ì¤Þ¤¹¡¥Á°¼Ô¤Ï¥æ¡¼¥¶ÊÑ¿ô¤Ç¡¤¸å¼Ô¤ÏMakefile.am¤ÎÃø¼Ô¤Î¤¿¤á¤Î¤â ¤Î¤Ç¤¹¡¥

AM_YFLAGS’¤ÏÄ̾-d¥ª¥×¥·¥ç¥ó¤òyacc¤ËÅϤ¹¤È¤­»ÈÍÑ ¤µ¤ì¤Þ¤¹¡¥Automake¤Ï¤³¤ì¤¬°ÕÌ£¤¹¤ë¤È¤³¤í¤òÃΤäƤ¤¤Æ¡¤yacc -d¤Ç ¥Ó¥ë¥É¤µ¤ì¤ë¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¹¹¿·¤ÈÇÛÉۤΥ롼¥ë¤ò¡¤¼«Æ°Åª¤ËÄ´À°¤·¤Þ¤¹¡¥ ¤·¤«¤·¡¤Automake¤¬Ê¬¤«¤é¤Ê¤¤¤â¤Î¤Ï¡¤¤³¤Î¥Ø¥Ã¥À¤¬»ÈÍѤµ¤ì¤ë¾ì½ê¤Ç¤¹¡¥¥Ø¥Ã ¥À¤¬ºÇ½é¤Ë»ÈÍѤµ¤ì¤ëÁ°¤Ë¥Ø¥Ã¥À¤ò¥Ó¥ë¥É¤·¤Æ¤ª¤¯¤³¤È¤Ï¤¢¤Ê¤¿¤ÎÀÕǤ¤Ç¤¹¡¥ Ä̾盧¤ì¤Ï¡¤¥Ø¥Ã¥À¤¬Â¾¤Î¥Õ¥¡¥¤¥ë¤«¤é¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤È¤­¡¤°Í¸À­ ¤ÎÄÉÀפ¬Æ°ºî¤¹¤ë¤¿¤á¤ËɬÍפȤʤê¤Þ¤¹¡¥°ìÈÌŪ¤Ê²ò·èºö¤Ï¡¤¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë ¤ò°Ê²¼¤Î¤è¤¦¤ËBUILT_SOURCES (see Sources)¤Ë¥ê¥¹¥È¥¢¥Ã¥×¤¹¤ë ¤³¤È¤Ç¤¹¡¥

BUILT_SOURCES = parser.h
AM_YFLAGS = -d
bin_PROGRAMS = foo
foo_SOURCES = … parser.y …

ƱÍͤˡ¤lex¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¡¤configure.ac¤ÇÊÑ¿ô ‘LEX’¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥¤³¤¦¤¹¤ë¤¿¤á¤Ë‘AC_PROG_LEX’¤ò »ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¤¬(see Particular Program Checks in The Autoconf Manual)¡¤AM_PROG_LEX¥Þ ¥¯¥í(see Macros)¤Î»ÈÍѤò¿ä¾©¤·¤Þ¤¹¡¥

lex¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤­¡¤‘LFLAGS’¤È‘AM_LFLAGS’¥Õ¥é¥°¤¬ ÅϤµ¤ì¤Þ¤¹¡¥Á°¼Ô¤Ï¥æ¡¼¥¶ÊÑ¿ô¤Ç¡¤¸å¼Ô¤ÏMakefile.am¤ÎÃø¼Ô¤Î¤¿¤á¤Î ¤â¤Î¤Ç¤¹¡¥

Automake¤Ç¡¤°ì¤Ä¤Î¥×¥í¥°¥é¥à¤ËÊ£¿ô¤Îyacc(¤Þ¤¿¤Ïlex)¥½¡¼ ¥¹¥Õ¥¡¥¤¥ë¤ò´Þ¤á¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡¥¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ì¤Ä°Ê¾å¤Î°Û¤Ê¤ë yacc(¤Þ¤¿¤Ïlex)¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¤È¤­¡¤Automake¤Ï¡¤ ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Çyacc(¤Þ¤¿¤Ïlex)¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë¡¤ ylwrap¤È¸Æ¤Ð¤ì¤ë¾®¤µ¤¤¥×¥í¥°¥é¥à¤ò»ÈÍѤ·¤Þ¤¹¡¥¤³¤ì¤¬É¬Í×¤Ë¤Ê¤ë ¤Î¤Ï¡¤yacc¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë̾¤¬¸ÇÄꤵ¤ì¤Æ¤¤¤Æ¡¤ÊÂÎóŪ¤Êmake¤Çyacc ¤Î°ì¤Ä°Ê¾å¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òƱ»þ¤Ë¸Æ¤Ó½Ð¤¹²ÄǽÀ­¤¬¤¢¤ë¤¿¤á¤Ç¤¹¡¥ ylwrap¥×¥í¥°¥é¥à¤Ï¡¤Automake¤È°ì½ï¤ËÇÛÉÛ¤µ¤ì¤Þ¤¹¡¥¤½¤ì¤Ï ‘AC_CONFIG_AUX_DIR’¤¬»ØÄꤹ¤ë¥Ç¥£¥ì¥¯¥È¥ê (see Finding ‘configure’ Input in The Autoconf Manual)¡¤¤Þ¤¿¤Ï¡¤¤½ ¤Î¥Þ¥¯¥í¤¬configure.ac¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯ ¥È¥ê¤Ë¤¢¤ê¤Þ¤¹¡¥

yacc¤ËÂФ·¤Æ¤Ï¡¤´Êñ¤Ê¥í¥Ã¥¯¤Ç¤Î´ÉÍý¤ÏÉÔ½½Ê¬¤Ç¤¹¡¥yacc¤Î ½ÐÎϤϡ¤ÆâÉô¤Ç¾ï¤ËƱ¤¸¥·¥ó¥Ü¥ë̾¤ò»È¤¦¤Î¤Ç¡¤Æ±¤¸¼Â¹Ô·Á¼°¤ÎÃæ¤ËÆó¤Ä¤Î yacc¥Ñ¡¼¥µ¡¼¤ò¥ê¥ó¥¯¤¹¤ë¤ÏÉÔ²Äǽ¤Ç¤¹¡¥

gdb¤Ç¤Ï¡¤»ÈÍѤ¹¤ë̾Á°¤ò°Ê²¼¤Î¤è¤¦¤ËÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡¥

#define	yymaxdepth c_maxdepth
#define	yyparse	c_parse
#define	yylex	c_lex
#define	yyerror	c_error
#define	yylval	c_lval
#define	yychar	c_char
#define	yydebug	c_debug
#define	yypact	c_pact
#define	yyr1	c_r1
#define	yyr2	c_r2
#define	yydef	c_def
#define	yychk	c_chk
#define	yypgo	c_pgo
#define	yyact	c_act
#define	yyexca	c_exca
#define yyerrflag c_errflag
#define yynerrs	c_nerrs
#define	yyps	c_ps
#define	yypv	c_pv
#define	yys	c_s
#define	yy_yys	c_yys
#define	yystate	c_state
#define	yytmp	c_tmp
#define	yyv	c_v
#define	yy_yyv	c_yyv
#define	yyval	c_val
#define	yylloc	c_lloc
#define yyreds	c_reds
#define yytoks	c_toks
#define yylhs	c_yylhs
#define yylen	c_yylen
#define yydefred c_yydefred
#define yydgoto	c_yydgoto
#define yysindex c_yysindex
#define yyrindex c_yyrindex
#define yygindex c_yygindex
#define yytable	 c_yytable
#define yycheck	 c_yycheck
#define yyname   c_yyname
#define yyrule   c_yyrule

¤½¤ì¤¾¤ì¤ÎÄêµÁ¤ËÂФ·¤Æ¡¤‘c_’ÀÜÆ¬¼­¤Ï¹¥¤ß¤Î¤â¤Î¤ËÃÖ¤­´¹¤¨¤Æ²¼¤µ¤¤¡¥ ¤³¤ì¤é¤Ï¡¤bison¡¤byacc¡¤¤½¤·¤ÆÅÁÅýŪ¤Êyacc¤ËÂФ¹ ¤ëưºî¤òÄêµÁ¤·¤Þ¤¹¡¥¥Ñ¡¼¥µ¥¸¥§¥Í¥ì¡¼¥¿¤¬¡¤¤³¤³¤Ç¥«¥Ð¡¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥·¥ó ¥Ü¥ë¤ò»ÈÍѤ·¤Æ¤¤¤ë¤³¤È¤¬Ê¬¤«¤Ã¤¿¾ì¹ç¡¤¥ê¥¹¥È¤Ë²Ã¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¤ ¿·¤·¤¤Ì¾Á°¤òÊó¹ð¤·¤Æ¤¯¤À¤µ¤¤¡¥