@yinnner
2018-09-26T02:16:39.000000Z
字数 746
阅读 887
【实验2.1】算术表达式的词法分析器
实验步骤
1. 定义词法规则
定义表达式语言词法规则,用EBNF/文法/正规式表示;
EBNF:
\<无符号整数> : : = \<数字>{\<数字>}
\<无符号实数> : : = \<数字>{\<数字>}'.'\<数字>{\<数字>}
- \<数字> : : = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
- \<运算符> : : = '+' | '-' | '*' | '/'
- \<界符> : : = '(' | ')'
2. 状态转换图
为文法中各类单词符号作出状态转换图;
3. 扫描程序框图
根据状态转换图,得到各类单词的扫描程序框图;
4. 出错处理
考虑出错处理的出口;
词法错误类型:
- 词法中未定义的字符及任何不符合词法单元定义的字符。
- 此例中不合法的单词,如字母等非法字符。
5. 设计并实现词法分析程序
词法分析表:
| 类型type |
单词记号token |
单词种别symbol |
对应码 |
| 1 Constant 常数 |
|
INTEGER |
1 |
|
|
REAL |
2 |
| 2 Operator 运算符 |
+ |
PLUS |
3 |
|
- |
MINUS |
4 |
|
* |
TIMES |
5 |
|
/ |
DIVIDE |
6 |
| 3 Delimiter 界符 |
( |
LEFT_BRA |
7 |
|
) |
RIGHT_BRA |
8 |
再加上出错类型:ERROR。
全局变量
- sym 传递单词种别
- num传递无符号整数或无符号实数单词自身的值,即其数值
6. 设计典型用例并测试
测试目标
能正确识别给定字符串中合法单词;能对不合法的字符报错。
测试用例
- 正确用例:
- 2+3*6+2.5/7
- -3+3*(4.2+5)+7/4
- 2.0+3
- 错误用例:含有不合法的字符
- 32!
- 23.3.45
- ae34
- 3>2
- 345#
- 234?
- fere}
- hgtyu{
预期结果
- 2+3*6+2.5/7
- -3+3*(4.2+5)+7/4
- 2.0+3
- 错误用例:含有不合法的字符
- 32!
- 23.3.45
- ae34
- 3>2
- 345#
- 234?
- fere}
- hgtyu{