├── README.md └── calculator.c /README.md: -------------------------------------------------------------------------------- 1 | # calculator 2 | 编译原理课程作业-- 计算器, 内含表达式的计算(中缀转后缀) 3 | 4 | ### 计算器接受四则运算表达式为输入。如果表达式语法正确,则输出计算结果,否则报错,指出错误位置及原因。 5 | #### 测试用例: 6 | 1.正常运行 7 | ``` C 8 | float a; 9 | int b; 10 | a = (10.44*356+1.28) / 2 + 1024 * 1.6; 11 | b = a * 2 - a/2; 12 | write(b); 13 | write(a). 14 | ``` 15 | 16 | 2. Error( line 4 ): undefined identifier 17 | ``` C 18 | float a; 19 | int b; 20 | a = (10.44*356+1.28) / 2 + 1024 * 1.6; 21 | b = a * 2 - c/2; 22 | write(b). 23 | ``` 24 | 25 | 3. Error( line 2 ): syntax error 26 | ``` C 27 | float a; 28 | int ; 29 | a = (10.44*356+1.28) / 2 + 1024 * 1.6; 30 | b = a * 2 - a/2; 31 | write(b); 32 | write(a). 33 | ``` 34 | 35 | 4. Error( line 4 ): divide by zero 36 | ``` C 37 | float a; 38 | float b; 39 | a = 10.44; 40 | b = a/0; 41 | write(b); 42 | write(a). 43 | ``` 44 | 45 | 5. Error( line 4 ): type cast : turn int into float 46 | ``` C 47 | int a; 48 | float b; 49 | a = 10.44; 50 | b = a; 51 | write(b); 52 | write(a). 53 | ``` 54 | 55 | 6. Error( line 3 ): uninitialized identifier 56 | ``` C 57 | float a; 58 | int b; 59 | b = a * 2 - a/2; 60 | write(b); 61 | ``` 62 | 63 | ### 语法描述 64 | ``` 65 | <程序> -> 66 | (<语句><行结束符号>)*(<语句><全文结束符号>) 67 | 68 | <语句> -> 69 | <声明语句>|<赋值语句>|<输出语句> 70 | 71 | <声明语句> -> 72 | <声明符号><空格> <变量名> 73 | 74 | <赋值语句> -> 75 | <变量名><等号><表达式> 76 | 77 | <输出语句> -> 78 | <输出函数>(<变量名>) 79 | 80 | <声明符号> -> float | int 81 | 82 | Digit -> [0-9]; 83 | Letter ->[a-zA-Z] 84 | <变量名> -> (_|Letter)(Letter | Digit|_)* 85 | 86 | <行结束符号> -> ; 87 | 88 | <全文结束符号> ->. 89 | 90 | <等号> -> = 91 | 92 | <输出函数> -> write 93 | 94 | <空格> -> ( )+ 95 | 96 | <表达式> ->(<运算符号>|<整数>|<浮点数>)* 97 | 98 | <运算符号> ->[+-*/()] 99 | 100 | <整数> -> Digit* 101 | 102 | <浮点数> -> (Digit+).(Digit*) 103 | 104 | ``` 105 | 106 | -------------------------------------------------------------------------------- /calculator.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WanDerer23333/calculator-compiler/96adbff616eeeb0009cc9e05a51182c7df8f8bd5/calculator.c --------------------------------------------------------------------------------