我使用Flex
來標記輸入文件,以便我最終可以使用Bison
來製作簡單的C編譯器。C標識符的正則表達式
所以我還在鬼混與Flex
,我試圖提取數量,而忽略標識符和空格
%{
#include "stdio.h"
%}
dgt [0-9]
letter [A-Za-z]
white [ \r\t]+
id {letter}({letter}|{dgt})*
number {dgt}+
%%
{number} return atoi(yytext);
{id} { }
{white} { }
%%
void main(){
int val=0;
while((val=yylex())>0)
printf("You Entered %d\n",val);
}
這裏的問題是,隨着輸入文件像這樣:
hello 123 test assadf507ascv 123asd 0
我得到這樣的輸出:
You Entered 123
You Entered 123
我需要它RECOG nize只是數字,第二個輸出來自123asd
,這應該是一個無效的標識符。
我哪裏出錯了? 我應該制定一個明確檢測該案例的規則嗎?
我明白了,但爲什麼使用尾隨?爲什麼不直接連接? – Maverick 2014-12-19 01:09:40
啊,是的。抱歉。當我試圖讓一條規則只匹配一個數字*而沒有*其他字符時,我正在擺弄尾隨的上下文。類似於[0-9] +/[^ a-zA-Z_]。但是這並不奏效,我忘記了我不需要最後的解決方案。答案已更新。 – 2014-12-19 01:16:02
太棒了,對我也有效,謝謝。 – Maverick 2014-12-19 01:18:17