2013-02-19 39 views
0

所有,法|柔性規則操作忽略

我有圖案的在我的lex文件中指定類型:

"#"[ \\t]*"ifdef".*    { action_ifdef_manager(yytext);} 

如果這樣的文字encoutred #ifdef GLOBALVAR動作action_ifdef_manager不叫

感謝您的幫助。

+2

沒有一定的背景下回答你的問題幾乎是不可能的。顯然,如果這是您的詞法分析器中唯一的規則,那麼應該調用action_if_def_manager,但情況可能並非如此。試着簡化你的詞法分析來源,在你仍然觀察問題的最小范例中。 – 2013-02-19 11:43:48

+0

@ArthurReutenauer我認爲這個問題不是來自我的詞法分析器中規則的模糊性,事實上,模式末尾的'。*'將詞法分析器推到找到'\ n'女巫是我的詞法分析器中的模式所以'\ n'的動作被調用。 – Aymanadou 2013-02-19 13:11:10

+0

我不確定我是否理解你的觀點,但是這不完全是你的詞法分析器中的一個模棱兩可的問題?或者說,你設計它的方式是不明確的,Flex可以用你沒有想到的方式來解決這個問題。無論如何,如果換行符是這裏的問題,它可能足以將其排除在規則之外,例如通過使用'[^ \ n] *'而不是'。*' – 2013-02-19 15:43:39

回答

1

唯一的問題是模式的不明確性。你應該有一個像 '的#ifdef' 類似的模式

  a  | 
      ab  | 
      abc  | 
      abcd  ECHO; REJECT; 

這裏的詞法分析器中的 「ABCD」 流返回所有四個驗證模式A,AB,ABC,ABCD

看看the Flex manual