【发布时间】:2017-01-12 17:14:39
【问题描述】:
我正在为某种语言编写一个 llvm 代码生成演示,其中包括 if 语句。以下是与我的问题相对应的规则和操作:
IfStatement : IF CondExpression THEN Statement {if_Stmt(string($2),string($4));} %prec LOWER_THAN_ELSE ;
| IF CondExpression THEN Statement ELSE Statement {if_else_Stmt(string($2),string($4),string($6));}
;
CondExpression : Expression Relop Expression { $$ = operation($2,string($1),string($3));printf("Relop value : %s \n",$2);}
| Expression {$$ = $1;}
;
Relop : EE {$$ = (char *)(string("icmp eq ").c_str());printf("%s\n",$$);}
| NE {$$ = (char *)(string("icmp ne ").c_str());}
| LT {$$ = (char *)(string("icmp slt ").c_str());}
| GT {$$ = (char *)(string("icmp sgt ").c_str());}
| LTE {$$ = (char *)(string("icmp sle ").c_str());}
| GTE {$$ = (char *)(string("icmp sge ").c_str());}
;
CondExpression 规则应该解析条件表达式。我正在使用打印函数来打印类型为 的 Relop 令牌的值。 Relop 应该具有字符串函数内的条件标记的值,如上面的代码所示。但是打印函数的结果是0
Relop value : 0
而且Relop里面第二次打印的结果是正确的,
Relop value : icmp eq
为什么 CondExpression 中的 Relop 值为 0 以及如何使其取 Relop 规则返回的正确值。
【问题讨论】:
-
你的语义类型是什么?
-
char * 用于 CondExpression 和 Relop
标签: llvm yacc llvm-clang llvm-ir llvm-gcc