最簡單的lex的例子

來源:互聯網
上載者:User

標籤:lex   helloworld   詞法分析器   

lex和yacc可以協助你編寫程式轉換結構化輸入。既包括從輸入檔案中尋找模式的簡單文本搜尋程式,也包括將來源程式變換為最佳的目標代碼的C編譯器等。
?lex使用一系列對可能標記的描述,產生一個能識別那些標記的C常式(我們成為詞法分析器。詞法剖析器(lexer),或成為掃描程式)。
?lex使用的標記描述稱為Regex。yacc採用簡明的文法描述併產生在一個能分析文法的C常式。即剖析器。yacc剖析器自動檢測輸入的標記序列是否匹配文法中的某條規則,並且一旦輸入不匹配任一條規則,他就會檢測語法錯誤。
最簡單的lex程式

?%%    ?.|\n    ?ECHO?%%

?將它的標準輸入拷貝到標準輸出。

?用lex識別單詞
?構建一個識別不同類型英語單詞的簡單程式。識別動詞和非動詞
?

%{    /**     * 這個例子示範了非常簡單的識別     * 動詞/非動詞     */    /**     * {% %}為定義部分,定義一個段,介紹了將拷貝到最終程式中的     * 原始C程式碼。也就是說這一部分的內容C程式裡面是可以使用     * 的。如果有後來檔案中必須包含的標頭檔,那麼也需要在這裡面     * 包含。其中,{% %}裡面的內容使用C實現,lex將其中的內容直接     * 拷貝到產生的C檔案。     *     * lex中的注釋必須使用空白符縮排來正確標識,否則將會被lex     * 解釋成別的東西。     * 後面的%%標記這一部分結束     * 下面一部分是規則段,每個規則都有兩部分組成,模式和動作,     * 由空白分開。當lex產生的詞法剖析器識別出某個模式時,將     * 執行相應的動作,其中模式是unix樣式的Regex     */    /**     * 規則"|"表示下一個模式應用相同的動作,因此所有的     * 動詞都使用為最後一個動詞指定的動作     *     * island為什麼不匹配is而是匹配island或者是兩者都匹配呢?     *     * yytext數組包含匹配模式的文本     * lex有一套簡單的消除歧義規則:     * 1:lex模式只匹配輸入字元或字串一次     * 2:lex執行當前輸入的最長可能匹配的動作。     * 因為lsland是比is長的匹配u,所以lex把island     * 來看做匹配上面那條“包括一切”的規則     *     * 最後一行是預設情況語句。"."匹配分行符號意外的任意單個字元,     * "\n"匹配一個分行符號,ECHO輸出匹配的模式。     *     * 最後部分是使用者子常式序,有任意合法的C程式碼群組成。     *      * 使用命令進行編譯     * lex simple.lex  //產生lex.yy.c     * gcc lex.yy.c -o simple     *     */%}%%[\t ]+  /* 忽略空白 */;is |am |are |were |was |be |being |been |do |does |did |will |would |should |can |could |has |have |had |go  {printf("%s : is a verb\n",yytext);}[a-zA-Z]+   {printf("%s: is not a verb\n",yytext);}.|\n    {ECHO; /* 通常的預設狀態 */}%%int main(){    yylex();    return 0;}?//必須要包含的函數int yywrap(){    return 1;}

下面是我的程式的運行結果:

最簡單的lex的例子

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.