Next: Example-Jargon Converter, Previous: Example-Counting Words, Up: More Examples [Contents][Index]
¤³¤³¤Ç¤Ï¡¢ Pascal¤Î¤è¤¦¤Ê¸À¸ìÍѤλú¶ç¥¹¥¥ã¥Ê¤òºî¤ëÊýË¡¤ò¼¨¤·¤Þ¤¹¡£ ¤³¤Î¥¹¥¥ã¥ÊÄêµÁ¤Ç¤Ï¡¢ ¸Ä¡¹¤Î¥¡¼¥ï¡¼¥É¤¬¥ë¡¼¥ë¤È¤·¤Æ¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¡Ê°ìÈÌŪ¤Ë¤Ï¡¢ ¤¹¤Ù¤Æ¤Î¥¡¼¥ï¡¼¥É¤ò¥Æ¡¼¥Ö¥ë¤Ë³ÊǼ¤·¤Æ¤«¤é¥Æ¡¼¥Ö¥ë¸¡º÷¤ò»È¤¦¼êË¡¤¬¤è¤¯¸«¤é¤ì¤Þ¤¹¤¬¡¢¡Ë ¤³¤³¤Ç¤ÎÊýË¡¤Ï¡¢ ¥¡¼¥ï¡¼¥É¤È¼±Ê̻ҤȤò¶èÊ̤¹¤ë¤¿¤á¤ÎÊýË¡¤È¤·¤Æ¤Ï¡¢ °ìÈÌŪ¤ËºÇ¤â´Êñ¤Ê¤â¤Î¤Ç¤¹¡£ ¤Þ¤¿¡¢ ¼±ÊÌ»ÒÍѤˤ¿¤À£±¤Ä¤Î¥ë¡¼¥ë¤¬¤¢¤ë¤È¤¤¤¦ÅÀ¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ ¿¤¯¤Î¾ì¹ç¡¢ ¤³¤Î¥ë¡¼¥ë¤Ï¥·¥ó¥Ü¥ë¡¦¥Æ¡¼¥Ö¥ë¤ò´ÉÍý¤¹¤ë¤¿¤á¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¤â¤¦£±¤ÄÃí°Õ¤¹¤Ù¤ÅÀ¤Ï¡¢ ‘_FILE’¤È‘_BEGIN’¤¬ÀèÆ¬¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò»ý¤Ä¤È¤¤¤¦ÅÀ¤Ç¤¹¡£ Flex¡¢ ¤Þ¤¿¤ÏC¤ÇÄêµÁºÑ¤ß¤Î̾Á°¤Ï¡¢ ÄɲÃŪ¤Ê¹©Éפʤ·¤Ç¤Ï»È¤¨¤Ê¤¤¤È¤¤¤¦¤³¤È¤ò¼¨¤¹¤¿¤á¤Ë¡¢ ¤³¤Î¤è¤¦¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤è¤ê¤â¤â¤Ã¤È°ìÈÌŪ¤Ë»È¤ï¤ì¤ë¼êË¡¤Ï¡¢ ¤¹¤Ù¤Æ¤Î¥È¡¼¥¯¥ó¤ÎÀèÆ¬¤â¤·¤¯¤ÏËöÈø¤Ë²¿¤é¤«¤Îʸ»úÎó¤òÉղ乤ë¤È¤¤¤¦¤â¤Î¤Ç¡¢ ¤³¤¦¤¹¤ë¤³¤È¤Ë¤è¤Ã¤ÆÌäÂê¤ÏȯÀ¸¤·¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£ ‘TOK’¤ä‘SYM’¤¬°ìÈÌŪ¤Ë¤è¤¯»È¤ï¤ì¤ë³ÈÄ¥»Ò¤Ç¤¹¡£
/* * pascal.lex : PASCAL¥¹¥¥ã¥Ê¤ÎÎã */ %{ #include <stdio.h> #include "y.tab.h"
int line_number = 0;
void yyerror(char *message); %} %x COMMENT1 COMMENT2
white_space [ \t]* digit [0-9] alpha [A-Za-z_] alpha_num ({alpha}|{digit}) hex_digit [0-9A-F] identifier {alpha}{alpha_num}* unsigned_integer {digit}+ hex_integer ${hex_digit}{hex_digit}* exponent e[+-]?{digit}+ i {unsigned_integer} real ({i}\.{i}?|{i}?\.{i}){exponent}? string \'([^'\n]|\'\')+\' bad_string \'([^'\n]|\'\')+
%% "{" BEGIN(COMMENT1); <COMMENT1>[^}\n]+ <COMMENT1>\n ++line_number; <COMMENT1><<EOF>> yyerror("EOF in comment"); <COMMENT1>"}" BEGIN(INITIAL);
"(*" BEGIN(COMMENT2); <COMMENT2>[^)*\n]+ <COMMENT2>\n ++line_number; <COMMENT2><<EOF>> yyerror("EOF in comment"); <COMMENT2>"*)" BEGIN(INITIAL); <COMMENT2>[*)]
/* FILE¤ÈBEGIN¤Ï¡¢Flex¤äC¤Ë¤ª¤¤¤Æ¤Ï´û¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤¿¤á * »È¤¦¤³¤È¤¬¤Ç¤¤Ê¤¤ÅÀ¤ËÃí°Õ¡£¤³¤ì¤Ï¡¢¤¹¤Ù¤Æ¤Î¥È¡¼¥¯¥ó¤Î * ÀèÆ¬¤ËTOK_¤ä¤½¤Î¾¤ÎÀÜÆ¬¼¤òÉղ乤뤳¤È¤Ë¤è¤Ã¤Æ¡¢¤è¤ê * ¤¹¤Ã¤¤ê¤È¹îÉþ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë */
and return(AND); array return(ARRAY); begin return(_BEGIN); case return(CASE); const return(CONST); div return(DIV); do return(DO); downto return(DOWNTO); else return(ELSE); end return(END); file return(_FILE); for return(FOR); function return(FUNCTION); goto return(GOTO); if return(IF); in return(IN); label return(LABEL); mod return(MOD); nil return(NIL); not return(NOT); of return(OF); packed return(PACKED); procedure return(PROCEDURE); program return(PROGRAM); record return(RECORD); repeat return(REPEAT); set return(SET); then return(THEN); to return(TO); type return(TYPE); until return(UNTIL); var return(VAR); while return(WHILE); with return(WITH);
"<="|"=<" return(LEQ); "=>"|">=" return(GEQ); "<>" return(NEQ); "=" return(EQ); ".." return(DOUBLEDOT);
{unsigned_integer} return(UNSIGNED_INTEGER); {real} return(REAL); {hex_integer} return(HEX_INTEGER); {string} return{STRING}; {bad_string} yyerror("Unterminated string");
{identifier} return(IDENTIFIER); [*/+\-,^.;:()\[\]] return(yytext[0]); {white_space} /* ²¿¤â¤·¤Ê¤¤ */ \n line_number += 1; . yyerror("Illegal input");
%% void yyerror(char *message) { fprintf(stderr,"Error: \"%s\" in line %d. Token = %s\n", message,line_number,yytext); exit(1); }