2012年3月29日 星期四

lex處理C註解的兩種方式

方法一:



"/*"  {
        int c1 = 0, c2 = input();
        for (;;) {
            if(c2 == EOF)
                break;
            if(c1 == '*' && c2 == '/') {
                printf("comment:\n %s\n", yytext);
                break;
            }
            c1 = c2;
            c2 = input();
        }
      }



方法二:


%x CMNT

%%

"/*" BEGIN CMNT;
<CMNT>.
<CMNT>\n
<CMNT>"*/"BEGIN INITIAL;

替emacs加入「flex mode」

google一下就會找到emacswiki這個網站。它設計得很好,頁面下方的se also連結通常都有你需要的資訊。

1. 至 http://ftp.sunet.se/pub/gnu/emacs-lisp/incoming/flex-mode.el 下載mode file。
2. 將其放入~/.emacs.d/lisp。(這個資料夾要自己建)
3. 在.emacs中加入

(add-to-list 'load-path "~/.emacs.d/lisp/")
(autoload 'flex-mode "flex-mode.el"
  "Major mode for editing flex documents." t)
(add-to-list 'auto-mode-alist
             '("\\.l\\'" . flex-mode))

第一行指示emacs去該path找檔案;第二行叫emacs在啟動時自動載入該檔案;第三行可有可無,在開啟附檔名.l檔案時自動切換到flex-mode。

reference:
http://www.emacswiki.org/emacs/FlexMode
http://ftp.sunet.se/pub/gnu/emacs-lisp/incoming/flex-mode.el
http://compsci.ca/v3/viewtopic.php?t=15102
http://en.wikipedia.org/wiki/Wikipedia:Wikipedia-mode.el