주어진 시리즈 내에서 특정 시퀀스를 식별 할 수 있는지 알고 싶습니다.주어진 시리즈에서 특정 시퀀스를 식별하는 규칙을 어떻게 정의 할 수 있습니까?
lex
은 3 개의 다른 토큰, 즉 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에 대한 좋은 자습서를 찾아보아야 할 것입니다 (수천 명이 넘습니다)? 들소 설명서에는 그 자체로 아주 좋은 지침서가 있습니다. –
규칙은 다음과 같이 말합니다 :'seq_2'를 만들기 위해서는 무엇보다도'seq_1'이 먼저 필요합니다. 'seq_1'을 만들기 위해서는'seq_1'이 먼저 필요합니다. 당신을 시작하게 할 아무 것도 없습니다. 문법을 만족시키는 것은 불가능합니다. – melpomene
@Someprogrammerdude 문제는 'START'및 'STOP'으로 구분 된 시퀀스를 찾는 방법을 지정하는 규칙을 작성하는 방법에 관한 것입니다. 나는 튜토리얼과 핸드북을 읽었지만'YACC'에서이 규칙들을 어떻게 구현할 지 아직 명확하지 않다. – Simone