2011-09-14 4 views
1
L = ((a^n)(b^n+m)(a^m)) | n, m = 0, 1, 2...) 

저는 문맥 자유형 문법을 처음 접했고 기본 사항을 알고 있지만 잠시 동안 고민하고 있습니다. 나는 코드의이 부분이 무엇을 의미하는지 잘 모릅니다 우선 들어문법 구성에 도움이 필요합니까?

:

| n, m = 0, 1, 2...) 

그리고 둘째로, 어떻게 다른 지수와 같은 변수를 가질 수 있습니다? 나는 완전한 개념을 얻지 않고있는 것처럼 느낀다.

편집 : 또한이 문법을 구성하는 규칙을 구성 할 수 있어야합니다.

편집 : 추가 태그

+0

전체 과제 설명 /이 숙제입니까? –

+0

예, 방금 태그를 추가했습니다. 질문은 다음과 같은 언어를 생성하는 문법을 만들 것을 요구하고있었습니다. 나는 Michael이 도왔던 것을 이해하지 못하는 것들을 추가했다. – tehman

답변

4

먼저 단어를 단어로 설명하십시오. 이 언어는 a로 시작하는 모든 문자열의 언어이며, b 다음에 a가 오며, b의 수는 a의 총 수와 같습니다 (양쪽에 있음).

다음으로 우리는 언어로 문자열을 가져 와서 새 문자열을 만드는 규칙을 생각해냅니다. 문자열이 주어지면 앞쪽에 a를 추가하고 가운데에 b를 추가하거나 가운데에 b를 추가하여 다음으로 긴 문자열을 얻을 수 있습니다. 빈 문자열은이 언어 (n = m = 0)이기도하므로 유도의 기본으로 사용할 수 있습니다. 조금 더 가깝게 보면 더 좋은 규칙을 얻을 수 있습니다. 즉, 어떤 문자열을 두 개의 문자열 (a^n b^n) (a^m b^m)으로 나눌 수 있습니다. 연결은 문법으로하기 쉽고^k b^k는 문법으로하기 쉽습니다. 그게 전부입니다.

내가 규칙을 얻을

...

S := LR 
    L := empty | aLb 
    R := empty | bRa 

얻으려면, 예를 들어 아바바, ...

S := LR := aLbR := aaLbbR := aabbR := aabbbRa := aabbba 

숙제 인 경우 태그를 붙이면 좋습니다. 이것이 자습이라면 다음 트릭을 없앨 것입니다 : 영어로 언어를 기술하십시오; 쉬운 기초 경우를 확인하는 것을 시도하십시오; 언어에 이미 포함 된 문자열에서 더 복잡한 문자열 (즉, 긴 문자열)을 만들기위한 규칙을 식별하십시오. 규칙을 재구성하거나 트릭을 알아내어 문법에 쉬운 내용으로 규칙을 설명 할 수 있습니다. 문법을 작성하고 몇 줄에 그것을 확인하십시오.

문법에서 쉽게 할 수있는 것은 무엇입니까? 언어 조합, 언어 연결, 기호 쌍 (예 :^k b^k), 문장 검색 등의 조합도 가능합니다.

+0

이봐, 이건 놀랍다. 이제는 문법과 함께 규칙을 적용 할 순서에 관계없이 어떤 시점에서 대답으로 나옵니다. 규칙을 여러 번 재사용 했더라도? – tehman

+0

구성중인 문자열이 프로덕션/규칙의 왼쪽에 부분 문자열로있는 한 모든 규칙을 적용 할 수 있습니다. 당신은 가능한 한 여러 번 규칙을 사용할 수 있습니다. 문법의 종류는 저작물에 적용되는 제한에 관해서 만 다르다 : LHS와 RHS의 특성, 그리고이 둘의 관계. – Patrick87

1

n 및 m의 값에 제한 단지 수학 표기법이다. 즉, (a^n)*(b^n+m)*a^m 형식의 문자열의 경우 "n"과 "m"은 두 개의 별개 값이지만 (0 일 수도 있고 같을 수도 있음), 0, 1, 2 ...은 또는 0과 같다.

+0

문법 규칙을 만드는 방법을 설명해 주시겠습니까? – tehman

+0

죄송합니다. 나는 다른 형식을 사용하기 때문에 언어 사양이 무엇을 의미하는지 파악할 수 없습니다. – Michael

+0

감사합니다. 어쨌든, 당신의 대답이 나를 앞으로 움직였습니다! – tehman

관련 문제