【发布时间】:2017-12-30 13:26:31
【问题描述】:
我想知道是否有可能在给定的系列中识别出某个序列。
lex 产生三个不同的令牌:START、AMINO、STOP。我想通过YACC 识别所有以START 开头、具有一系列AMINO 标记并以STOP 结尾的序列。示例:START AMINO AMINO ... AMINO STOP
我之前没用过YACC/bison,所以试了一下:
%%
seq_2: START seq_1 STOP {printf("%s", $2);};
seq_1: seq_1 AMINO
%%
但这些规则不起作用。
- 是否可以(并且方便)通过
lex和YACC尝试解决此问题? - 如果可能的话,哪一种是解决问题的好方法?
【问题讨论】:
-
“不工作”是什么意思?你能详细说明一下吗?
seq_1的语义规则应该是什么?你知道seq_1是一个无限递归规则,没有什么可以阻止它(我猜是你的问题)?也许你应该去找一些关于 YACC 的好教程(有成千上万个)? Bison 手册本身就有很好的教程。 -
规则说:要构建
seq_2,您首先需要(除其他外)seq_1。要构建seq_1,您首先还需要一个seq_1。没有什么可以让你开始;语法是不可能满足的。 -
@Someprogrammerdude 问题是关于如何编写一个规则来指定如何找到由
START和STOP分隔的序列。我已经阅读了一些教程和手册,但我还不清楚如何在YACC中实现这组规则。