Lex是Lexical Analyzer Generator(取前三個字母)的縮寫,是Unix環境下非常著名的工具。
Lex是Lexical Analyzer Generator(取前三個字母)的縮寫,是Unix環境下非常著名的工具,主要功能是生成壹個詞法分析器(scanner)的C源碼,描述規則采用正則表達式(regular expression)。
描述詞法分析器的文件,經過lex編譯後,生成壹個lex.yy.c的文件,然後由C編譯器編譯生成壹個詞法分析器。詞法分析器,簡單來說,其任務就是將輸入的各種符號,轉化成相應的標識符(token),轉化後的標識符很容易被後續階段處理。
Lex將用戶輸入的表達式和動作actions轉換為宿主語言;生成的程序叫做yylex。yylex識別字符流中的表達式,並且當每壹個表達式被檢測出來後,輸出相應的動作。
警告和缺陷:
有壹些病態的表達式會使由表格轉化的確定的自動機成指數增長;幸運的是,這樣的情況很少見。
REJECT沒有重復掃描輸入;而是記住先前掃描的結果。這意味著如果壹條規則需要回退發現的上下文,並且REJECT被執行了,用戶將不能使用unput來改變輸入流中的後續字符。這是對用戶操作後續輸入的唯壹限制。