解析数学表达式,会更好地对待不可见的乘法(例如ab,意思是时间b,或(ab)c,或(ab)(c + d)ecc。ecc。)在词法分析器或者解析器?
答案 0 :(得分:4)
隐式乘法是一种语法结构。 Lexing纯粹是为了识别各个符号。两个相邻表达式应该相乘的事实不是词汇概念,因为词法分析器不知道“表达式”。解析器可以。
如果词法分析者负责,则必须添加许多与相邻令牌相关的规则。例如,在两个×
,IDENTIFIER
和IDENTIFIER
,或NUMBER
和NUMBER
之间插入IDENTIFIER
令牌,或者在)
和IDENTIFIER
之间,或IDENTIFIER
和(
之间......除了哦,IDENTIFIER (
可能是函数调用,所以我可能需要查看在符号表中向上IDENTIFIER
以查看它是否是函数名称...
多么糟糕!
另一方面,解析器可以使用单个语法规则执行此操作。
E → E '×' E
| E E