flex和bison:如何识别数组

时间:2012-11-12 15:05:22

标签: c++ bison flex-lexer

我正在玩野牛和flex,以了解口译员的工作方式。我已经完成了一些事情,比如范围({INT:INT}{INT:INT:INT}),字符串({字符串“这里有任何文字”})等,但我无法确定哪个应该是正确的方式帮助Bison了解用户是否以[INT, INT, ID, ID, INT, ..., INT, ID, ID...]形式输入数组?

第一个想到的是使用flex关键字BEGIN,然后直到行尾,但这似乎很愚蠢,因为你需要很多东西,比如理解下一个成员是INT还是ID ,这不是那么好的方式。我还能做什么?我宁愿选择与野牛一起做,但我不知道如何让野牛在[]之间进行递归,以获取它们所包含的内容。我该怎么办?

提前致谢!

1 个答案:

答案 0 :(得分:3)

简单 - 只需制作一个递归规则。

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

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