Compiler construction 编译器设计:您如何区分;op“U减去数字”;及;“否定”吗;?

Compiler construction 编译器设计:您如何区分;op“U减去数字”;及;“否定”吗;?,compiler-construction,language-design,compiler-theory,Compiler Construction,Language Design,Compiler Theory,如何区分标记序列“op_减号”和简单的负数?我认为它取决于上下文,取决于解析源代码时遇到的操作数 根据您选择/遇到的语法类型,在处理减法运算时,您可能会遇到以下情况: operand1 - operand2 或者,如果您的语言使用前缀符号,您将得到如下结果: - operand1 operand2 (- operand1 operand2) 在这两种情况下,如果您处理的是减法或负数,那么您应该能够从上一个标记(在中缀表示法的情况下)或从下一个标记/下两个标记的前瞻性推断,因为后者只有一个操作

如何区分标记序列“op_减号”和简单的负数?

我认为它取决于上下文,取决于解析源代码时遇到的操作数

根据您选择/遇到的语法类型,在处理减法运算时,您可能会遇到以下情况:

operand1 - operand2
或者,如果您的语言使用前缀符号,您将得到如下结果:

- operand1 operand2
(- operand1 operand2)

在这两种情况下,如果您处理的是减法或负数,那么您应该能够从上一个标记(在中缀表示法的情况下)或从下一个标记/下两个标记的前瞻性推断,因为后者只有一个操作数。

这取决于它之前的操作数。你能举个例子吗?我想看看前面的标记会有用的。吹毛求疵:大多数语言本身没有负数,只有一元数
-
(否定)通常应用于文本。你处于哪个编译阶段?您是在尝试lex(从原始文本创建标记)、解析(从标记创建抽象语法树)还是生成代码。我的第一个想法是在解析开始之前在令牌流上运行一个修复过程。