0
我正在嘗試構建一個簡單的詞法分析器,用於(科學)C程序的簡單輸入輸出庫。當使用自動工具,包括automake的,libtool的,和autoconf編譯,我得到以下錯誤:與flex文件編譯錯誤
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*
緩衝超鏈接指向我的%}%
在序言的結尾。爲什麼我得到這個錯誤?我也沒有稱爲「的」的符號。
謝謝,
喬爾
您是不是想要用Adobe Flex來標記它? – JeffryHouser 2010-07-20 12:50:41
沒有他的意思是真正的flex,但是一般來說,標記爲gnu-flex,所以會刪除'flex'標籤。 – 2010-07-20 14:18:01
謝謝西蒙 - 我不知道Adobe Flex有這樣的事情。 – 2010-07-20 16:36:07