QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 629|回复: 3

用过flex的解答一下

[复制链接]
发表于 2003-10-31 15:35:08 | 显示全部楼层 |阅读模式
%{
#include <stdio.h>
%}

DIGIT        [0-9]

%%

{DIGIT}*        {printf( "An integer: %s (%d)\n", yytext,atoi( yytext ) );}

%%

这段程序有什么问题?运行的结果是并没有识别数字,定义没有被识别
system:rh7 rh9
flex:2.5.4

附:flex手册 关于定义(替换)的一段


Name definitions have the form:

           name definition

       The "name" is a word beginning with a letter  or  an  underscore  (鈥檁鈥?
       followed by zero or more letters, digits, 鈥檁鈥? or 鈥?鈥?(dash).  The def-
       inition is taken to begin at the first non-white-space  character  fol-
       lowing  the name and continuing to the end of the line.  The definition
       can subsequently be referred to using "{name}", which  will  expand  to
       "(definition)".  For example,

           DIGIT    [0-9]
           ID       [a-z][a-z0-9]*

       defines  "DIGIT"  to  be  a  regular  expression which matches a single
       digit, and "ID" to be a regular expression which matches a letter  fol-
       lowed by zero-or-more letters-or-digits.  A subsequent reference to

           {DIGIT}+"."{DIGIT}*

       is identical to

           ([0-9])+"."([0-9])*

       and  matches  one-or-more digits followed by a 鈥?鈥?followed by zero-or-
       more digits.
发表于 2003-10-31 19:22:51 | 显示全部楼层

什么问题??

编译以后怎么个不对法???
回复

使用道具 举报

 楼主| 发表于 2003-11-1 10:27:58 | 显示全部楼层
编译不报错   就是不能识别要替乱的内容
回复

使用道具 举报

发表于 2003-11-1 11:16:04 | 显示全部楼层
后面在加上MAIN函数,MAIN 函数里面需要有YYLEX函数驱动。
/* scanner for a toy Pascal-like language */
     
     %{
     /* need this for the call to atof() below */
     #include <math.h>
     %}
     
     DIGIT    [0-9]
     ID       [a-z][a-z0-9]*
     
     %%
     
     {DIGIT}+    {
                 printf( "An integer: %s (%d)\n", yytext,
                         atoi( yytext ) );
                 }
     
     {DIGIT}+"."{DIGIT}*        {
                 printf( "A float: %s (%g)\n", yytext,
                         atof( yytext ) );
                 }
     
     if|then|begin|end|procedure|function        {
                 printf( "A keyword: %s\n", yytext );
                 }
     
     {ID}        printf( "An identifier: %s\n", yytext );
     
     "+"|"-"|"*"|"/"   printf( "An operator: %s\n", yytext );
     
     "{"[^}\n]*"}"     /* eat up one-line comments */
     
     [ \t\n]+          /* eat up whitespace */
     
     .           printf( "Unrecognized character: %s\n", yytext );
     
     %%
     
     main( argc, argv )
     int argc;
     char **argv;
         {
         ++argv, --argc;  /* skip over program name */
         if ( argc > 0 )
                 yyin = fopen( argv[0], "r" );
         else
                 yyin = stdin;
     
         yylex();
         }

我刚刚看的MAN。希望有帮助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 10:30 , Processed in 0.041676 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表