ããã«ãYACC宣è¨é¨ã«ã¯ã%{ ... %}ã§å²ããã¨ã«ãããCè¨èªã®å®£è¨ãç½®ããã¨ãåºæ¥ã¾ããYACCææ³ãã¡ã¤ã«ã®è©³ãã説æã¯å¾åãã«ãã¦ãããã§ã¯ããä¸åº¦parser.yã®å 容ã確èªãã¦ã¿ã¾ãã %{ #include <stdio.h> /* C宣è¨é¨ */ #include <stdlib.h> /* é常ã¯#includeã並㶠*/ #include <string.h> #include "calc.h" %} %token NUM /* YACC宣è¨é¨ */ %left '-' '+' '*' '/' %% /* 以ä¸ãææ³è¦åé¨ */ input: /* empty*/ | input line ; line: '\n' | exp '\n' { printf("%d\n", $1); } ; exp: NUM | exp '+' exp { $$ = $1 + $3
yacc ã®ä½¿ãæ¹ æçµæ´æ°: 2003-04-16 16:39 ç®æ¬¡ yacc ã¨ã¯ è¨è¿°æ¹æ³ è¨è¿°ä¾ ä½¿ç¨æ¹æ³ yaccã¨ã¯ yaccã¨ã¯ï¼æ§æè§£æé¨ãè¨è¿°ãããã¼ã«ã§ããï¼æ§æã°ã©ããï¼BNFè¨æ³ã§è¨è¿°ãããææ³ã«åºã¥ãã¦æ§æè¦åãè¨è¿°ãããã¨ã§ï¼å ¥åããããã¼ã¯ã³ã®ä¸¦ã³ãææ³ã«ãã£ã¦ããããæ¤æ»ããããã°ã©ã (parser: ãã¼ã¶)ãçæãããã¨ãã§ããï¼ä¾ãã°ï¼æåã®ãã¼ã¯ã³ã "I" ã§ï¼ãã®æ¬¡ã« "LOVE" ãå ¥åããï¼"YOU" ãå ¥åããï¼æå¾ã®å¾ã« ".(ããªãªã)" ãå ¥åãããã¨ããã¨ï¼ãã®ãã¼ã¯ã³ã®ä¸¦ã³ã¯è±èªã®ææ³ã«ãã£ã¦ããï¼æ£ããè±æã§ããã¨èªèãããã¨ãã§ããï¼ãã®ãããªç°¡åãªä¾ã§ããã°ï¼æ§æè§£æé¨ãçæããã®ã¯ããã»ã©å°é£ãªä½æ¥ã§ã¯ãªããï¼ææ³ãå¤ããªãã«ãããã£ã¦ï¼å ´ååãçãçºçãï¼æ§æè§£æã¯é常ã«é£ãããªãï¼yaccã使ããã¨ã§ï¼æ§æè§£æã®
PowerDNS BV (bert hubert <bert@powerdns.com>) v0.8 $Date: 2002/07/22 14:02:09 $ 大西 大樹 (daiki onishi <[email protected]>) v0.8j 2003/02/08 æ¬ããã¥ã¡ã³ã㯠Lex 㨠YACC ã®åºæ¬çãªä½¿ãæ¹ã«ã¤ãã¦è¨è¿°ãã¾ã 1. ã¤ã³ãããã¯ã·ã§ã³ 1.1 æ¬ããã¥ã¡ã³ãã«å«ã¾ããªããã® 1.2 ãã¦ã³ãã¼ã 1.3 ã©ã¤ã»ã³ã¹ã«ã¤ã㦠2. Lex 㨠YACC ã§ã§ããã㨠2.1 ããããã®ããã°ã©ã ã®ãã£ã¦ããã㨠3. Lex 3.1 æ£è¦è¡¨ç¾ã§ã®ããã 3.2 C ã®ãããªã·ã³ã¿ãã¯ã¹ããã¤ããå°ãé«åº¦ãªä¾ 3.3 ãããã 4. YACC 4.1 åç´ãªæ¸©åº¦èª¿ç¯å¨ 4.2 弿°ãæ±ããããã«æ¡å¼µãããæ¸©åº¦èª¿ç¯å¨ 4.3 è¨å®ãã¡ã¤ã«ã®æ§æè§£æ
%{ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "calc.h" %} %token NUM %left '-' '+' '*' '/' %% input: /* empty*/ | input line ; line: '\n' | exp '\n' { printf("%d\n", $1); } ; exp: NUM | exp '+' exp { $$ = $1 + $3; } | exp '-' exp { $$ = $1 - $3; } | exp '*' exp { $$ = $1 * $3; } | exp '/' exp { $$ = $1 / $3; } ; %%
The asteroid to kill this dinosaur is still in orbit. - Lex Manual Page A compiler or interptreter for a programminning language is often decomposed into two parts: Read the source program and discover its structure. Process this structure, e.g. to generate the target program. Lex and Yacc can generate program fragments that solve the first task. The task of discovering the source structure again
yacc/lexã¨ã¯ Cã§ããã°ã©ãã³ã°è¨èªã®å¦çç³»ãå®è£ ããã®ã§ããã°ã å¤ãã®å ´åãyaccã¨lexã¨ãããã¼ã«ã使ãã¾ãã å®ã®ã¨ãããCã¨yacc/lexã§ç°¡åãªããã°ã©ãã³ã°è¨èªãä½ããã¨ããã®ã¯ã 以åããCè¨èªã¨ã¿è©± ãã§æ¸ããã é»åãä½ã£ã¦ã¿ããã ã®ç¼ãç´ãã«ãªãã¾ããyaccã¨lexã®èª¬æããã¡ãã«ç°¡åã«æ¸ããã®ã§ã ãã¡ããè¦ã¦ãã ããââã¨è¨ãããã¨ããã§ããã ã¾ãããã§ã軽ã説æãã¾ãã å 容çã«ã¯éè¤ãã¨ãããã³ãããã¦ããé¨åãããã¾ããã ããã°ã©ãã³ã°è¨èªã®å¦çç³»ã¯ãé常ã以ä¸ã®ãããªæé ãåãã¾ãã åå¥è§£æ ã½ã¼ã¹ããã°ã©ã ãããåå¥(ãã¼ã¯ã³)ãã®ä¸¦ã³ã«åå²ããå¦çã§ãã æ§æè§£æ ãã¼ã¯ã³ã®ä¸¦ã³ãããè§£ææ¨ãæ§ç¯ããå¦çã§ãã ãã®å¾ãCãªã©ã®æ©æ¢°èªãåãã³ã³ãã¤ã©ã Javaã®ãããªãã¤ãã³ã¼ããåãã³ã³ãã¤ã©ãªãã ãã³ã¼ãçæãã¨ããå¦ç
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}