编写一个LEX输入文件,使之生成可计算文本文件的字符数、单词数和行数且能够报告这些数字的程序。单词为不带标点或空格的字母和/或数字的序列。标点和空格不算为单词。编写一个LEX输入文件,使之可生成将SPL程序注释之外的所有关键字(保留字)均转换为大写的程序。有关SPL的关键字请见第2章或第8章所述。该LEX生成的程序要能够对SPL源程序进行分析,将不是大写的关键字转换为大写。生成如下文法表示的表达式对应的计算器:
exp->exp + exp | exp – exp | exp *exp | exp / exp
| exp ^exp | -exp
|(exp)|NUM
对于输入的中缀表达式,要给出结果。如3+(4*5)结果应为23.要求能连续处理若干个数学表达式,直到输入结束或文件结束。
已知表达式文法的扩充巴克斯范式为:
S->E#
E->T+T|T-T
T->F*F|F/F
F->(E)|I
从键盘或文件输入表达式,利用递归下降法求出其值。若输入表达式有错,则给出报错信息。例如:输入表达式串为13+5*4,则应给出结果为23.
1