1

我正在玩 bison 和 flex 以了解口译员的工作方式。我已经做了一些事情,比如范围({INT:INT}{INT:INT:INT})、字符串({string"here come any text"})等,但我无法决定哪种方法应该是帮助野牛理解用户是否以表格形式输入数组的正确方法[INT, INT, ID, ID, INT, ..., INT, ID, ID...]?

首先想到的是使用 flex 关键字BEGIN,然后一直查看到行尾,但这似乎很愚蠢,因为您需要很多东西,比如了解下一个成员是 INT 还是 ID,这不是一个好方法. 我还能做什么?我宁愿用野牛做这件事,但我不知道如何让野牛看起来递归[]抓住它们包含的所有内容。我该怎么做?

提前致谢!

4

1 回答 1

3

简单——只需制定一个递归规则。

expr :- INT | ID;
array_expr :- array_expr expr | expr;
array :- '[' array_expr ']';

自从我做 Bison 以来已经有一段时间了,但这应该非常接近正确。

于 2012-11-12T15:08:15.503 回答