【发布时间】:2017-09-22 11:44:47
【问题描述】:
假设我有一个像这样的 Bison 表达式:
multiply: T_FIGURE { $$ = $1; }
| multiply T_ASTERISK multiply { $$ = $1 * $3; }
;
它应该返回一些数字相乘的结果,或者如果只提供一个数字,则返回输入。如果我想将提供的数字限制为最多 3 个,我会重写如下表达式:
multiply: T_FIGURE { $$ = $1; }
| T_FIGURE T_MULTIPLY T_FIGURE { $$ = $1 * $3; }
| T_FIGURE T_MULTIPLY T_FIGURE T_MULTIPLY T_FIGURE { $$ = $1 * $3 * $5; }
;
我的问题:有没有办法重写这个表达式,这样我就不必手动指定出现次数,而是使用某种参数能够轻松地将上限更改为例如 30 次出现?
【问题讨论】:
标签: regex parsing syntax bison flex-lexer