【发布时间】:2017-08-06 12:01:59
【问题描述】:
我正在做一个宠物项目,我必须实现一个词法分析器/解析器。我正在阅读有关该主题的内容并制作一个简单的数学解析器的原型,以便我理解。
有些东西我还是不太明白,它是词法分析器和解析器之间的边界。考虑以下语法错误的表达式:
+1.234.2 + pi
我目前正在将其转换为以下内容:
UnaryPlusOperatorToken: Lexeme "+" Pos: 1
NumberToken: Lexeme "1.234.2" Pos: 2
TriviaToken: Lexeme " " Pos: 9
BinaryAddToken: Lexeme "+" Pos: 10
TriviaToken: Lexeme " " Pos: 11
ConstantToken. Lexeme "pi" Pos: 12
好的,这里有几件事:
- 词法分析器是否应该真正关心
NumberToken中错误的额外小数点,并在我正在遍历整个解析上下文的“错误包”中添加一个错误,还是应该是稍后捕获此问题的解析器? - 词法分析器应该区分“+”在一种情况下是一元运算符还是在另一种情况下是二元运算符?还是应该简单地生成一个
PlusToken,然后让解析器找出它是什么?
我发现很难理解两者之间的界限在哪里。
【问题讨论】:
-
恕我直言 1. NumberToken 应该是“1.234”,后跟一个“InvalidToken:
.” 2. 解释是解析器的工作。
标签: parsing lexer compiler-construction