如何在yacc中使用递归时检查值?

时间:2012-11-19 09:41:32

标签: yacc lex

我在yacc中使用递归,我想检查递归规则解析的所有值。我的yacc规则是

%{

#include<stdio.h>

.

.

.

%}

%%

abc:ABC expr

;

expr:VALUE','expr

|VALUE

;


%%

如果我有像

这样的陈述
ABC 1,2,3,4 

它被解析。
我想检查通过 expr 解析的所有数字 总和等于某个值说10
我怎么检查这个?

1 个答案:

答案 0 :(得分:1)

修改

您可以对已解析的值进行计数,并使用类似以下代码保持其运行总计:

%{

#include<stdio.h>
int count;

.

.

.

%}

%%

abc: { count = 0; } ABC expr { printf("count: %d; sum: %d\n", count, $2); }

;

expr: VALUE ',' expr { $$ = $1 + $3; }

| VALUE { $$ = $1; count++; }

;


%%