0

少なくとも 1 つの項目を含むコンマ区切りリストの文法は次のとおりです。

column_expression_list:
    column_expression {
        $$ = LinkedList_New();
        LinkedListItem *item = LinkedListItem_New($1);
        LinkedList_add($$, item);
    }
    |
    column_expression_list T_COMMA column_expression {
        LinkedListItem *item = LinkedListItem_New($3);
        LinkedList_add($1, item);
    }
;

column_expression_list常に最終的には に分解されるcolumn_expressionため、リンクされたリストの各アイテムは常に安全にリンクされたリストに追加されますか?

そうでない場合、これを達成するための正しい文法は何ですか?

4

1 に答える 1

1

あなたの文法は問題ありません: column_expression_list2 つ目の規則では、一方が既に「認識」されている必要があるため、最初の規則以外に構築する手段はありません。もちろん、 に関する別のルールがある場合はcolumn_expression_list、状況が異なる可能性があります。

LR パーサーの場合、右再帰よりも左再帰を好むのは正しいことです。スペースを節約し、対話型パーサーの場合は、希望どおりに動作します。たとえば、http://www.gnu.org/software/bison/manual/html_node/Recursion.htmlを参照してください。

于 2013-02-08T07:59:04.727 に答える