if文を含む特定の言語のllvmコード生成デモを書いています。yaccで条件文を解析する
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ルールは、条件式を解析する必要があります。私は印刷機能を使用して、< char *>タイプのRelopトークンの値を表示しています。 Relopは、上のコードのように、文字列関数内に条件付きトークンの値を持つ必要があります。しかし、印刷機能の結果は0
Relop value : 0
あるとCondExpressionでRELOP値が0で、それを作るためにどのように、なぜRELOP内側の第二の印刷の結果は、
Relop value : icmp eq
正しいですかRelopルールから返された正しい値を取る。
セマンティックタイプとは何ですか? – rici
char * CondExpressionとRelopの両方について –