利用 flex 和 bison 寫乙個計算器

2021-09-28 16:11:30 字數 1300 閱讀 3286

實現實數範圍內的加減乘除、乘方、開方,三角函式sin、cos運算

a)在命令提示符下依次執行一下兩行命令

flex 檔名.lex

bison -o檔名.c 檔名.y

編譯的話,可用命令提示符,不過需要自己搭建環境

gcc -o 可執行程式名稱 lex.yy.c bison生成的檔名.c
當然可以用其他的方法去執行,不過需要在bison生成的.c檔案中加入lex生成的檔案的檔名,這樣就可以在codeblocks裡面或者其他c語言的編譯環境下,直接執行bison生成的.c檔案

lex程式

%%%

/* a-z為變數 */

[a-z]\.?

[0-9

]+|[

0-9]

+\.[0-

9]*[

-+()

,=/*\n]

sin

cos

sqrt

pow

[ \t] ;

. yyerror("無效的輸入字元");

%%int yywrap(void)

bison程式

%token    integer variable cos sqrt pow sin

%left '+'

'-'%left '*'

'/'%left sin%%

%program:

program statement '\n'|;

statement:

expr

|variable '=' expr

;expr:

integer

|variable

|expr '+' expr

|expr '-' expr

|expr '*' expr

|expr '/' expr

|'('expr')'

|pow '(' expr ',' expr ')'

|sin'('expr')'

|cos '(' expr ')'

|sqrt '(' expr ')';%

%void

yyerror

(char

* s)

#include

"lex.yy.c"

intmain

(void

)

flex中自己寫的乙個BeanUtils類

在專案中不時由物件之間屬性的的拷貝所以寫了此類,感覺不是很好但是不知道 有錯?希望各位提出意見 package conponents 物件的賦值的過程的方法 source 賦值過程源的物件 desc 賦值過程目標的物件 propertys 賦值源中標的屬性陣列 isinclude 是否包括賦值源中屬...

如何利用Objective C寫乙個精美的DSL

在程式開發中,我們總是希望能夠更加簡潔 更加語義化地去表達自己的邏輯,鏈式呼叫是一種常見的處理方式。我們常用的 masonry expecta 等第三方庫就採用了這種處理方式。像這種用於特定領域的表達方式,我們叫做 dsl domain specific language 本文就介紹一下如何實現乙個...

利用反射自己寫的乙個ModelHelper類

開發中 很多人都會使用bll model這種開發,我也是,雖然現在有很多的自動生成工具,能在幾秒內生成cs的模板,但我個人還不是很喜歡,我還是喜歡自己乙個乙個去寫,這樣更能了解自己的 不過手動編寫的時候,最討厭的就是getmodel這類方法了,把datarow的資料轉換成乙個model,實在寫的我頭...