用flex文件编译错误
我正在尝试构建一个简单的词法分析器,以配合(科学)C程序的简单输入输出库。 在使用自动工具(包括automake,libtool和autoconf)进行编译时,出现以下错误:
simpleio_lex.l:41: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘of’
这通常意味着我在函数原型的末尾忘记了分号,但是我已经检查了我的头文件,并且没有这种省略。
这里是simpleio_lex.l:
%{
int yylex(void);
#define yylex sio_lex
#include "simpleio.h"
%}
NUM [0-9] /* a number */
FLOAT {NUM}+"."{NUM}* /* a floating point number */
FLOATSEQ {FLOAT[[:space:]]?}+
FLOATLN ^FLOATSEQ$
SYMBOL [a-z]+ /* a symbol always comes at the
beginning of a line */
SYMDEF ^SYMBOL[[:space:]]*FLOAT /* define a single value for a symbol */
RANGE FLOAT":"FLOAT":"FLOAT /* a range of numbers */
SYMRANGE ^SYMBOL[[:space:]]+RANGE$ /* assign a range of values to a symbol */
%%
/* a set of lines with just numbers
indicates we should parse it as data */
{FLOATLN}+ sio_read_stk_inits (yytext);
SYMDEF sio_read_parse_symdef (yytext);
SYMRANGE sio_read_parse_symrange (yytext);
%%
/* might as well define these here */
sio_symdef_t *
sio_read_parse_symdef (char * symdef)
{
sio_symdef_t * def = malloc (sizeof (sio_symdef_t));
/* split the string into tokens on the LHS and RHS */
char * delim = " ";
char * lvalue = strtok (symdef, delim);
size_t lsize = sizeof (lvalue);
char * rest = strtok (NULL, delim);
double plval; /* place holder */
int s_ck = sscanf (rest, "%lg", &plval);
if (s_ck == EOF)
return NULL;
else
{
def->value = plval;
def->name = malloc (lsize);
memcpy(def->name, lvalue, lsize);
}
return def;
}
Emacs中的*compilation*
缓冲区超链接指向前导尾部的%}%
。 为什么我得到这个错误? 我也没有称为“的”的符号。
谢谢,
乔尔
问题是一个悬而未决的评论,我自己折叠成一行,如下所示:
/* this is a comment that's going to run into a
new line */
第二行直接复制到源代码中,没有它的注释分隔符。 看来flex对于评论和格式化来说相当挑剔。 错误消息中提到的“of”是评论第二行的第一个单词。
问题是我必须查看派生的.c文件,而不是在超链接指向我的.l文件中。 这是转化的来源:
#line 38 "simpleio_lex.l"
int yylex(void);
#define yylex sio_lex
#include <simpleio.h>
beginning of a line */
#line 505 "simpleio_lex.c"
从这个由flex处理的文件中:
%{
int yylex(void);
#define yylex sio_lex
#include <simpleio.h>
%}
NUM [0-9] /* a number */
FLOAT {NUM}+"."{NUM}* /* a floating point number */
FLOATSEQ {FLOAT[[:space:]]?}+
FLOATLN ^FLOATSEQ$
SYMBOL [a-z]+ /* a symbol always comes at the
beginning of a line */
谢谢! 乔尔
链接地址: http://www.djcxy.com/p/57861.html