我有一個C語言程序,它將表達式轉換爲RPN(反向波蘭語符號)。 我需要做的就是用Flex代替用C編寫的詞法分析器代碼。我已經做了一些工作,但是我遇到了模式方面的問題 - 字或變量ID是特定的。是的,這是課堂練習。ID的彈性模式給出'分段錯誤'
這是我有:
%{
#include "global.h"
int lineno = 1;
int tokenval = NONE;
%}
%option noyywrap
WS " "
NEW_LINE "\n"
DIGIT [0-9]
LETTER [a-zA-Z]
NUMBER {DIGIT}+
ID {LETTER}({LETTER}|{DIGIT})*
%%
{WS}+ {}
{NEW_LINE} { ++lineno; }
{NUMBER} { sscanf (yytext, "%d", &tokenval); return(NUM); }
{ID} { sscanf (yytext, "%s", &tokenval); return(ID); }
. { return *yytext;}
<<EOF>> { return (DONE); }
%%
和global.h
#define BSIZE 128
#define NONE -1
#define EOS '\0'
#define NUM 256
#define DIV 257
#define MOD 258
#define ID 259
#define DONE 260
所有的工作定義,當我使用數字,括號和運營商,但是當我鍵入例如a+b
它給了我Segmentation fault
(輸出應該是ab+
)。 請不要問我一個解析器代碼(如果真的需要,我可以共享) - 需求是僅使用Flex實現詞法分析器。
不知道flex但我沒有看到'{LETTER}'的條目在哪裏使用? – sln
它在模式中引用ID:'ID {LETTER}({LETTER} | {DIGIT})*',那麼當發現ID模式時,它會運行代碼(並提供錯誤提示) –