lex和yacc 入門-- 計算器
阿新 • • 發佈:2020-10-14
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