0

http://www.archive-host.com/files/1959502/24fe084677d7655eb57ba66e1864081450017dd9/cAST.txtにあるC文法で左再帰エラーが発生しました 。交換するとき

initializer
 : assignment_expression
 | '{' initializer_list '}'
 ;

initializer
 : assignment_expression
 | '{' initializer_list '}'
 |  initializer_list
 ;

Ctrl-Dでこのコードを実行しようとしているため、これを実行しました

int k [2] = 1,4;

ただし、このコードは最初のバージョンでは機能します

int k [2] = {1,4};

{}なしで行う方法はありますか?

4

1 に答える 1

3

これを行うには、コンテキスト感度(またはその順序で何か)を導入する必要があります。

問題は、1,4すでに定義された意味を持っているということです。1これは、を評価し、結果を破棄して4から、式全体の値であるを評価するコンマ演算子を使用した式です。

そのため、これを機能させるには、初期化子に対して通常の式とは異なる構文を使用する必要があります(そして、その過程で、現在定義されているCからかなり大きく逸脱します)。純粋に文法的な観点からは、文脈依存で行う必要はほとんどありませんが、基本的に、両方に共通の構文を使用するのではなく、通常の式の構文とは別に/並列に初期化子の構文を定義する必要があります。

于 2013-03-08T21:13:51.727 に答える