1. 程式人生 > 實用技巧 >lex和yacc 入門-- 計算器

lex和yacc 入門-- 計算器

>>> hot3.png

lex 是自動生成詞法分析器的工具,通過輸入副檔名為.l的檔案,輸出詞法分析器的C 語言程式碼。

flex是增強版的lex。

yacc是自動生成語法分析器的工具,通過輸入副檔名為.y的檔案,輸出語法分析器的C語言程式碼。

bison是GNU專案所釋出的yacc的功能擴充版。

myclac.l


myclac.y


以上程式碼來之《自制程式語言》

注意:預設在MAC上編譯會出現warning。需要在

#define YYDEBUG=1

下面新增

int yyerror(char const *str);
int yylex(void);

這2行。

同時該計算器不支援:-1+2 或者 2+-1 這種表示式

所以在
primary_expression
: DOUBLE_LITERAL

後面新增:
| SUB DOUBLE_LITERAL
{
$$ = -1 * $2;
}
;


轉載於:https://my.oschina.net/jackin/blog/370414