2013-03-13 76 views
-2

我寫在彎曲掃描儀,我有以下兩個定義匹配一個奇怪的情況:關於柔性

%% 
"int" printf("JUST_INT"); 
"int"[ \t\n]+"matrix" printf("MATRIX_INT"); 
[A-Za-z][A-Za-z0-9]* printf("IDENTIFIER"); 
%% 

當輸入到掃描儀是int matrixM = 3;輸出爲MATRIX_INT IDENTIFIER。它將輸入視爲int matrix M=3。但實際上,這不是matrix,標識符的名稱是matrixM。輸出應該是JUST_INT IDENTIFIER。這是爲什麼發生?那是因爲我的定義嗎?

回答

2

這是不是一個好主意,讓規則掃描像"int"[ \t\n]+"matrix"這樣的空間。只需將「int」,「matrix」和IDENTIFIER作爲三個單獨的標記返回並讓解析器對其進行排序即可。這比flex好得多。 flex只是第一長的比賽。

1

如果你真的想在掃描層面解決這個問題,你可以匹配

"int"[ \t\n]+"matrix"/($|[ \t\n]|;|whateverelsedelimitsanidentifier) 

這可以確保如果它後面是「無字」 matrix只匹配。正如EJP所說的那樣,這不是一個好主意,你應該在解析器級別做這件事。