这个简单的Lex例子有什么问题?

时间:2012-11-11 13:53:47

标签: bison lex

Heloo EveryBody, 我有一个简单的lex语言代码,我尝试通过“bison -d hello.l”运行它,但我得到错误! 我收到以下错误。

有人能让我知道我错了吗?

bison -d hello.l

hello.l:4.1-5: syntax error, unexpected identifier

代码:

%{
#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 );

     %%

     int main( int argc, char **argv )
         {
         ++argv, --argc;  /* skip over program name */
         if ( argc > 0 )
                 yyin = fopen( argv[0], "r" );
         else
                 yyin = stdin;

         yylex();
         }

1 个答案:

答案 0 :(得分:1)

您正在尝试使用bison编译(f)lex输入文件。使用yylex或flex。

编辑:好的,还有其他问题(我试图编译你的代码):

  1. 规则必须从行的开头开始,没有 在他们面前的空白(删除开头的空格 第9,14行等。

  2. 在文件开头添加%option noyywrap

  3. 使用flex filename.l编译文件。

  4. 然后编译生成的.c文件。您不需要额外的标题。