初步學習lex和yacc

2021-07-05 10:07:08 字數 984 閱讀 3894

因為是非計算機本科,所以沒有學編譯原理,進來想補補課,於是買了本《自製程式語言》,裡面介紹了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 語法由符號組成,即語法的 詞 符號是...