因為是非計算機本科,所以沒有學編譯原理,進來想補補課,於是買了本《自製程式語言》,裡面介紹了lex和yacc工具,於是裝起來試了下。
原來用工具來解析字串還是挺方便的,以前知道正則以後,就覺得這東西很好,現在有了lex和yacc,把正則能做的事情又放大了,能夠做更豐富的事情。
例如,寫乙個簡單的把字串裡的數字相加,其他忽略的程式(說是簡單是指功能,其實調通很不簡單,哈哈,特別是把%type寫成了%token的筆誤後,糾結了很久)
下面貼上**
test.l
%
%}%%
"\n" return cr;
[0-9]+
[ \t] ;
. %%
test.y
%
%union
%token a b
%token cr err
//!!this is %type!!
%type expression other
%%line_list : line | line_list line;
line : expression cr | cr ;
expression : a | other | expression a | expression other ;
other: err ;
%%int
yyerror(char const *str)
int main(void)
}
然後利用lex和yacc來生成乙個可執行檔案
yacc -dv test.y
lex test.l
cc *.c
來看看執行效果吧
還不錯哦~~
lex和yacc格式入門
lex和yacc格式入門 lex檔案 hi oi n tchau bye n int main void int yywrap void yacc檔案 token hi bye program hi bye hi hi bye bye int yyerror char msg 會發現它們的結構都很相...
Lex和yacc工具介紹
在編譯過程中,詞法分析和語法分析是兩個重要階段。lex和yacc是unix環境下非常著名的兩個工具,可以生成分別完成詞法分析和語法分析功能 的c 在學習編譯原理過程中,可以善加利用這兩個工具,加深對兩個階段的理解。在平時的工作中,這兩個工具也會起到重要的作用。lex是lexical compiler...
Lex與Yacc學習(九)之Yacc語法
本文討論yacc語法的格式並描述可用的各種特徵和選項 yacc語法包括三部分 定義段 規則段和使用者子例程段 定義段.規則段.使用者子例程段.各部分由以兩個百分號開頭的行分開,儘管某乙個部分可以為空,但是前兩部分是必須的,第三部分和前面的百分號可以省略。yacc 語法由符號組成,即語法的 詞 符號是...