YACC无法从后继节点获取值

时间:2019-05-24 15:50:21

标签: c compiler-construction bison yacc

我正在做一个学校项目,遇到了一些麻烦。

我有这个yacc语法

FILE        : '{' GEOMETRY '}'
            ;

GEOMETRY    : key_type ':' value_point ',' key_coordinates ':' PONTO
            ;


PONTO       : VETOR_MIN2 { printf("%s", $<str>1); }
            ;

VETOR_MIN2  : '['  numero ',' numero ']'
            ;

当我在非终端PONTO中创建该printf时,只会得到以下内容: [

但是我应该得到这样的东西: [20,10] 这里缺少什么?请帮忙。 感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

规则的语义值是运行规则的动作后驻留在$$中的值。如果规则没有任何操作(例如VECTOR_MIN2),则默认操作为$$ = $1;(除非没有$1或类型不匹配,其中如果没有默认操作)。

如果您希望VECTOR_MIN2产生不同的值,则需要添加一个动作并将不同的值分配给$$