yaccファイルの結合の目的は何ですか?それはflexファイルのyylvalに直接関係していますか? yylvalを使用しない場合は、unionを使用する必要はありませんか?yylvalとunion
14
A
答えて
11
%union
の宣言は、yylval
のタイプを変更します。
bison
手動explains:通常(非リエントラント)パーサーで
、トークンの意味値は、グローバル変数
yylval
に格納されなければなりません。意味値に1つのデータ型のみを使用する場合は、yylval
にその型があります。タイプがint
(デフォルト)であればこのように、あなたはyylex
でこれを書くかもしれません:... yylval = value; /* Put value onto Bison stack. */ return INT; /* Return the type of the token. */ ...
あなたが複数のデータ型を使用している場合は、
yylval
のタイプは%union
宣言から作られた労働組合です(・セクションを参照してください値の型のコレクション)。したがって、トークンの値を格納するときは、適切な共用体のメンバを使用する必要があります。%union
宣言は次のようになります場合:%union { int intval; double val; symrec *tptr; }
は、
yylex
のコードは次のようになります。... yylval.intval = value; /* Put value onto Bison stack. */ return INT; /* Return the type of the token. */ ...
21
union
の目的は、放出されたノードにオブジェクトの異なる種類を格納できるようにすることですフレックスで.y
で
%union
{
int intValue;
float floatValue;
char *stringValue;
}
をあなたはint
、float
とstring
種類の基本的なサポートを提供する場合:あなたは、たとえば持つことができ、より良い説明すること
。これで何ができますか?
2つのこと:
まずトークンを生成するとき、あなたは自動的に正しい値を設定することができます。前の例の程度.l
ファイルを考えて、あなたが持つことができます。
[a-zA-Z][a-zA-Z0-9]* {
yylval.stringValue = strdup(yytext);
return IDENTIFIER;
}
[0-9]+ {
yylval.intValue = atoi(yytext);
return INTEGER;
}
[0-9]*\.[0-9]+"f"? {
yylval.floatValue = new atof(yytext);
return FLOAT;
}
あなたフレックス文法に値を直接使用することができます加えて:あなたはOOPの構文を使用する場合は最後に
nexp: nexp '+' nexp { $<floatValue>$ = $<floatValue>1 + $<floatValue>3 }
ツリーあなたはASTNode
は、Sのいずれかの種類の上位クラスである
%union
{
class ASTNode *node;
}
として組合を定義することができますyntaxノード。
関連する問題
- 1. UNIONとUNION ALLのパフォーマンス
- 2. yylvalをフレックスで使用する方法
- 3. なぜyylvalはnullですか?
- 4. Union allとSelection
- 5. Linq UnionとTake
- 6. SQL UNIONとMERGE
- 7. Mysql UNIONとGROUP BY
- 8. SQL Server UNIONとオフセットプライマリキー
- 9. UNION
- 10. 行が一意である場合、UnionとUnionのALL
- 11. CTEとUNIONのユニークなローコード
- 12. DISTINCTとしてSELECT UNION
- 13. バイソンのyylvalを使用して文字列を復元する
- 14. UNION列
- 15. MySQLがIN(CONSTとUNIONとSELECTからFROM(UNION))を混同している
- 16. MySQLのUNION
- 17. SQL - エラーUNION
- 18. OPTIMIZE UNION SQL QUERY
- 19. neo4j indegree outdegree union
- 20. UNION ALL Trick ORACLE
- 21. mySQL UNIONのエラー
- 22. SQL UNION ALLエラー
- 23. アクセスUNIONクエリクラッシュアクセス
- 24. スワップLexOrder Union Find
- 25. linked list union
- 26. SQL文のUNION
- 27. 空白UNIONバグ
- 28. UNION SELECTはSQLI
- 29. MYSQL UNION DISTINCT
- 30. MYSQL UNION ORDERING
なぜ1つの要素の和集合を定義するのですか?なぜ '#define YYSTYPE class ASTNode *'(メモリが提供されているのか)だけではありません。 –