⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pascal.lex

📁 flex
💻 LEX
字号:
/* * pascal.lex: An example PASCAL scanner * */%{#include <stdio.h>#include "y.tab.h"int line_number = 0;void yyerror(char *message);%}%x COMMENT1 COMMENT2white_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>[*)] /* note that FILE and BEGIN are already   * defined in FLEX or C so they can't    * be used. This can be overcome in                                 * a cleaner way by defining all the  * tokens to start with TOK_ or some  * other prefix.  */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}        /* do nothing */\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);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -