我正在尝试为C#语言编写一个词法分析器,但我无法弄清楚除了上下文之外如何区分加号和加号运算符。 我需要源文件中的下一个标记。所以,当我遇到一个+我现在如何引用一些整数,真实的,或者它引用+运算符的声明? 我的scannig功能如何恰当地区分这两种情况? 案件类似于此<和< =,<<,但在我的情况下,下一个角色每次都没有帮助。
int a = +1;
a=2 + 3;
答案 0 :(得分:1)
我正在尝试为C#语言编写一个词法分析器
好的,但你错了你的词法分析器/解析器分离栏了。
词法分析者的工作是将输入字符串" 输入到令牌中。解析器的工作就是解释这些。你的词法分析器应该只检测+
运算符,发出相应的标记,然后就是它。
然后,你的解析器具有上下文知识(即它知道它在某一特定时刻试图解析的表达式的哪一部分)处于更好的位置,以便在一元和二元运算符。词法分析器只是缺乏必要的信息。
显然,您不应将-
符号包含在数字代币中。
以下是一些令人兴奋的例子:
int a=+1;
- > int
a
=
+
1
;
a=2+3;
- > a
=
2
+
3
;
请注意第一种情况下的+
1
。你的词法分子不应该发出+1
。