2014-03-24 22 views
1

我需要設置令牌,如「任何字符,除了新行開頭」。我試了只識別一個字符串的開始條件lex

[^^] 

但這不起作用。首先,我需要檢測一些圖案化線:

%s arithm secOper 
NUMBER [0-9]+ 
INTEGER (-?[0-9]+) 
ASSIGN [=] 
VARY [A-Za-z][?-i:a-z0-9]{0,15} 
ARITHMSIGNS (\+[ ]*|\-[ ]*|\*[ ]*|\/[ ]*) 
SPACE [ ]+ 
SPACES [ ]* 
ANY [^^] 

%% 

^{NUMBER}{SPACES}{VARY}{SPACES}{ASSIGN}{SPACES}({VARY}|{INTEGER}) {BEGIN(arithm);} 
<arithm>{ANY}{SPACES}{ARITHMSIGNS}/({VARY}|{INTEGER}) {BEGIN(secOper);} 
<secOper>{VARY}|{INTEGER}$ {BEGIN(INITIAL);} 

%% 

所以串像

54 firstVar = 43 * newVar 

是真的,但如果輸入的是:

54 firstVar = 43 
* newVar 

(2串在C類與\ n)流必須是錯誤的,但模式識別它。我需要識別一個輸入行的所有啓動條件。我如何做到這一點?

回答

1

你這樣做是錯誤的。這是一個語法問題,而不是一個詞彙問題。如果換行符在您的語言中很重要,它應該顯式地出現在語法中,並且由詞法分析器作爲標記返回。

+0

這是一項小任務,而不是語言,我必須不野牛。所以如果我創建令牌換行並使用它,情況不會改變。 – freakz