Я пытаюсь запустить flex
в следующем файле с аргументами -lfl
.Я получаю следующие ошибки:
romans.l:14: name defined twice
romans.l:16: name defined twice
romans.l:17: name defined twice
romans.l:19: name defined twice
romans.l:22: name defined twice
romans.l:23: name defined twice
romans.l:24: bad character: \
romans.l:24: unknown error processing section 1
romans.l:24: unknown error processing section 1
romans.l:24: bad character: {
romans.l:24: unknown error processing section 1
romans.l:24: unknown error processing section 1
romans.l:24: bad character: }
romans.l:25: unrecognised '%' directive
flex: can't open -lfl
Давайте пока проигнорируем другие ошибки в моем коде, так как я не понимаю, почему существует проблема со строками с 14 по 23. В лучшую сторонумои знания, не должно быть проблем с тем, что я пытаюсь сделать.Вот мой файл lex.
1 %{
2 // file created via echo
3 # include <studio.h>
4 # include "roman.tab.h"
5 %}
6 I{4} { yyerror("syntax error");}
7 V{4} { yyerror("syntax error");}
8 X{4} { yyerror("syntax error");}
9 C{4} { yyerror("syntax error");}
10 L{4} { yyerror("syntax error");}
11 D{4} { yyerror("syntax error");}
12 M{4} { yyerror("syntax error");}
13 CM { yylval = 900; return ARABIC_NUMERAL /* NINEHUNDRED */;}
14 M { yylval = 1000; return ARABIC_NUMERAL /* THOUSAND */ ; }
15 CD { yylval = 400; return ARABIC_NUMERAL /*return FOURHUNDRED*/;}
16 D { yylval = 500; return ARABIC_NUMERAL /*return FIVEHUNDRED*/;}
17 C { yylval = 100; return ARABIC_NUMERAL /*return HUNDRED*/;}
18 XL { yylval = 40; return ARABIC_NUMERAL /*return FOURTY*/;}
19 L { yylval = 40; return ARABIC_NUMERAL /*return FIFTY*/;}
20 IX { yylval = 9; return ARABIC_NUMERAL /*return NINE*/; }
21 IV { yylval = 4; return ARABIC_NUMERAL /*return FOUR*/; }
22 V { yyval = 5; return ARABIC_NUMERAL /*return FIVE*/; }
23 I { yylval = 1; return ARABIC_NUMERAL /*return ONE*/; }
24 \n { return EOL }
25 %
Числа спереди - это просто номера строк (скопированные из vim с: флаг setnumber включен).
Я предполагаю, что ошибка имеет какое-то отношениесо строкой «return ARABIC_NUMERAL», но где я видел, что это явно противоречит правилам lex?Я искренне почесываю голову и буду признателен за любые указатели в правильном направлении.