從自己的程式中使用lex的乙個小例子

2021-09-22 11:05:45 字數 1364 閱讀 6571

網上很多例子,都是yacc和lex結合的。而我想找乙個單純使用 lex的例子。而且可以從我的主程式來呼叫它。

上程式:

第一步,編寫 flex 檔案:example.flex

從網上找到的,其功能是對行數和字元數計數。

1

[root@cop01 tst]# cat example.flex2/*

name: example.flex

*/3 %option noyywrap

4 %7 %%

89 \n ++num_lines; ++num_chars;

10 . ++num_chars;

1112 %%

1314

int counter(char *stream,int *nlines,int *nchars)

1523 [root@cop01 tst]#

這裡,在flex檔案中,我沒有宣告main方法,即使宣告了,也會生成在 flex example.flex 後得到的 lex.yy.c 中。

而我想要從我自己的程式裡,來呼叫,所以命名了這個counter函式。

要特別注意上面的 yy_scan_string函式呼叫,如果沒有對它的呼叫,yylex會從標準輸入來讀資訊流的。

第二步,編寫我的主程式:

1

[root@cop01 tst]# cat test.c

2 #include 3 #include "

test.h"4

5int

main()

617 [root@cop01 tst]#

第三步,編寫標頭檔案:

1

[root@cop01 tst]# cat test.h

2int counter(char *stream,int *nlines,int *nchars);

3 [root@cop01 tst]#

最後,進行編譯和執行:

1 [root@cop01 tst]# gcc -g -wall -c lex.yy.c

2 lex.yy.c:974

: warning: 『yyunput』 defined but not used

3 [root@cop01 tst]# gcc -g -wall -c test.c

4 [root@cop01 tst]# gcc -g -wall -o test test.o lex.yy.o

5 [root@cop01 tst]# ./test

6 lines counted: 2

7 chars counted: 15

8 [root@cop01 tst]#

結束!

自己寫了乙個巨NB的程式

抱歉,確實想吸引眼球 不過我想把inside sql storage engine和.net結合起來的,我應該能排世界前10名吧?如果哪位老大發現另有高人,請及時告訴我,謝謝!粘圖先,因為這是我在ip creation的過程中隨手搞的東西,花了兩天 還沒有完,欠缺幾點 1 rid的獲取。2 gdi ...

oracle 中使用 rownum 的乙個誤區

一 首先看乙個簡單的測試 1 建立乙個簡單的 test 表,裡面插入 1 9 條資料 2 按照 status 字段進行排序,得到的結果 3 使用 rownum 取前 5 條結果 二 測試中的兩個問題 1 上面第二步中,select 出來的結果,第 5 條記錄的 userid 不是 5,而是 9 原因...

Android乙個程式使用另乙個程式的資源

應用場景 程式a的乙個imageview使用程式b的資源。前提 知道程式b的包名。關鍵 如下 是可以呼叫其他程式的 context.context ignore security 是資源 兩個一起寫都可以 context othercontext getcontext createpackageco...