採用JAVACC分析運算表示式

2021-08-24 22:47:56 字數 1464 閱讀 7792

expressionparser.jj配置檔案:

---支援變數x、函式(sin,cos...)、簡潔乘法(如 3sin(x) 表示3乘以sin(x))

/**

*分析計算公式

* saber

*/ options

parser_begin(expressionparser)

package myexample;

/** new line translator. */

public class expressionparser

public expressionparser(string expression,double x)

/** main entry point. */

public static void main(string args ) throws parseexception }

parser_end(expressionparser)

skip :

token :

token :

token :

token :

/*次方*/

token :

token :

token:

/** 解析表示式 */

double parse() :

| < minus >

i=timesanddivide()

)*}/**基本運算單元**/

double primary():

|d=calculatorpar()

| < minus >d=primary()

| d=dofunction()

}/**乘法運算**/

double timesanddivide():

| < divide >

i=primary()

)* }

/**函式計算**/

double dofunction():

| < cos >

arg=calculatorpar() }

/*** 遇到數字,有4種情況:

* a. 數字後緊跟著圓弧,如3(3-2),標識3乘以(3-2)

* b. 數字後是函式,如3sin(3.14),表示3乘以sin(3.14)

* c. 數字後是變數x,如3x,表示3乘以x變數

* d. 其他情況,則直接返回當前數字

*/double donumber():

| d=dofunction())*}

/** * 如果是數字則直接返回數字,否則,是變數則返回變數的次方

**/double getnumber():(

< x > )*

|(

< x > )*

}/*計算圓弧內的表示式*/

double calculatorpar():

}

三元運算表示式分析

三元運算表示式的型別 int i 99 system.out.println true?a 99999 99999超出字元範圍,表示式的型別確定為int system.out.println true?a 99 99可以認為是字元常量,表示式的型別確定為char system.out.println...

Python 變數,運算表示式

變數 變數不需要先定義,可以直接複製使用 變數可重複儲存不同的資料型別 可同時為多個變數複製,用逗號隔開 a,b a b 不支援自增自減 變數引用計數 相同資料的賦值,會共享同一片空間位址,並非占用乙個新的位址單元,節約記憶體。使用sys模組下的getrefcount 函式檢視變數引用計數 impo...

運算表示式求值模板

表示式計算 使用方法 輸入合法的表示式,加減乘除,可以帶括號,用空格分開數字和符號,1為結束標誌,比如 2 5 3 1 注意 這是用來算具體答案的,不是轉化成字尾表示式輸出的,當然,思想是遞迴建立表示式樹,然後後序遍歷得逆波蘭式,然後用棧計算結果 模板 include include include...