2

我正在编写一个词法扫描器,我想知道如何区分操作(例如-)和有符号数(例如-14)。例如,以下两行都有效:

+12
12 +12

目前,我的词法扫描器会像这样解析它们:

+12
12 +12

但是,稍后在程序中检查第二条语句的有效性时,它被标记为无效:一个数字标记不能跟在另一个没有相邻运算符的情况下。我希望它们被扫描为:

+12
12 + 12

我可以通过简单地检查前面的字符是否是运算符来实现这一点,如果是,则生成一个带符号的数字标记,否则一个运算符后跟一个数字,但是这样做会违反上下文无关语法的规则,并且会大大增加复杂性我的扫描仪。

如何以明确的方式扫描签名数字,以正确确定什么是数字令牌的一部分,哪些不是数字令牌的一部分?

4

1 回答 1

2

我处理过的大多数扫描仪都将标志视为操作员。所以,-12 不仅仅是一个整数文字,它是一个整数文字和一元符号运算符。我认为这可以解决您的问题,同时让您的扫描仪保持简单(它只需将 + 和 - 识别为标记;您的解析器可以计算出稍后使用的语义)。

于 2013-12-28T08:20:53.363 回答