문맥 자유 문법에서 임의의 문장을 생성하려고합니다. 각 단계에서 생성 될 다음 비단 말은이 질문과 관련없는 일부 확률 적 기준에 따라 결정됩니다. 내가 갇혀있는 곳에서, 문법과 지금까지 생성 된 부분 문장이 주어지면 문법에 따라 다음 단계에서 생성 될 수있는 비단 말 집합을 어떻게 결정할 수 있습니까?CFG에서 생성 할 때 유효한 다음 터미널 집합 확인
다음은 BNF 및 부분 생성의 예제 문법입니다. 세웠 죠
<expr> ::= <term> "+" <expr> | <term>
<term> ::= <term> "*" <factor> | <factor>
<factor> ::= "(" <expr> ")" | <const>
<const> ::= "0" | "1" | "2" | "3" | "4"
지금까지 시퀀스를 생성 :
(1 +
. 이 경우 생성 될 다음 토큰이 집합
{"(", "0", "1", "2", "3", "4"}
에서 나와야한다는 것을 쉽게 알 수 있습니다.
일반 문법 및 부분 생성을 고려하여이 집합을 결정하거나 각 단계에서이 집합을 사용할 수 있도록 문장을 생성하는 알고리즘이 있습니까?
답을 보내 주셔서 감사합니다. 필자의 경우, 마지막 비 터미널을 대체 할 프로덕션을 선택할 수있는 옵션이 없습니다. 오히려, 나는 선택할 수있는 모든 터미널의 어휘를 가지고 있으며, 생성 단계마다 접두사에 따라 선택을 합법적 인 터미널로 제한하려고합니다. 접두어를 파싱하지 않고 다음 토큰을 결정하는 방식과 호환되는 방식으로 문장을 직접 생성 할 수 있습니까? – user7954416