代数表达式中的隐形乘法

时间:2014-02-22 18:47:21

标签: parsing math

解析数学表达式,会更好地对待不可见的乘法(例如ab,意思是时间b,或(ab)c,或(ab)(c + d)ecc。ecc。)在词法分析器或者解析器?

1 个答案:

答案 0 :(得分:4)

隐式乘法是一种语法结构。 Lexing纯粹是为了识别各个符号。两个相邻表达式应该相乘的事实不是词汇概念,因为词法分析器不知道“表达式”。解析器可以。

如果词法分析者负责,则必须添加许多与相邻令牌相关的规则。例如,在两个×IDENTIFIERIDENTIFIER,或NUMBERNUMBER之间插入IDENTIFIER令牌,或者在)IDENTIFIER之间,或IDENTIFIER(之间......除了哦,IDENTIFIER (可能是函数调用,所以我可能需要查看在符号表中向上IDENTIFIER以查看它是否是函数名称...

多么糟糕!

另一方面,解析器可以使用单个语法规则执行此操作。

E → E '×' E
  | E E