할 때 이란 알 듯 모를 듯 애매한 문법 또는 생산 규칙 OK?(bison 교대/축소 경고)

StackOverflow https://stackoverflow.com/questions/599774

문제

가 확실히 많 문서 및 설명서에서 해결하 이동/을 줄일 오류가 있습니다.들소 문서를 제안하는 올바른 솔루션은 일반적으로 다만%기대하고 그것을 다룰 수 있습니다.

이 있을 때 같은 것들이:

S: S 'b' S | 't'

당신은 쉽게 해결할 수 있는 그들을 다음과 같다:

S: S 'b' T | T
T: 't'

나의 질문은:그것을 떠나 더 나은 문법을 터치 모호하고%기대 교대/축소 문제 또는 그것은 더 나은 조정하려고 문법을 피하기 위해?나는 의심이 있고 그것의 필요에 따라 저자에게,그러나 내가 정말 모르겠어요.

도움이 되었습니까?

해결책

내가 그것을 읽고,귀하의 질문할 때"이란 알 듯 모를 듯 애매한 문법 또는 생산 규칙 OK?"

첫째로 고려한 언어 설명하고 있다.무엇을 의미가 될 수 있도록 모호한 생산 규칙으로 언어입니다.

귀하의를 들어 설명하는 언어로 포함될 수 있습 식용: t b t b t b t

식으로 해결하는 두 번째 예 (((( t ) b t) b t ) b t ) 하지만에서는 모호한 문법 수 있도 ( t b ( t b ( t b ( t))))( t b t ) b ( t b t ).수효에 따라 달라질 수 있습니다.는 경우 b 운영 모델을 빼기,그것은 정말이 모호할 수 있지만,이 경우 그것은 또한 그것이 될 수 있습니다 확인.이에 따라 달라집니다.

두 번째 질문을 고려하는 어떤 결과 문법이 소스 파일을 처럼 보이는 끝 이후,갈등이 해결되었습니다.로 다른 소스 코드,문법은 읽기 위한 것이 인간에 의해,그리고 이차적으로,또한 컴퓨터입니다.아보세요법을 제공하는 명확한 설명이 무엇을 파서 하려고 하에서의 문법입니다.는 경우,파서를 실행하는 일부 정의되지 않은 행동이,예를 들어,평가 순서의 함수의 인수에서 열망하는 언어의 문법 모호합니다.

다른 팁

운영자 우선 순위로 충돌 해결을 안내 할 수 있습니다. 선언하다 'b' 좌파 또는 오른쪽 연관성 운영자로서 적어도 해당 사례를 다루었습니다.

더 복잡한 패턴의 경우, 최종 파서가 모든 경우에 올바른 결과를 생성하는 한 경고는별로 걱정하지 않습니다. 선언을 사용하여 올바른 결과를 제공 할 수 없다면 문법을 다시 작성해야합니다.

지난 학기 내 컴파일러 과정에서 우리는 Bison을 사용하고 Pascal의 하위 집합을위한 컴파일러를 구축했습니다.

언어가 충분히 복잡하면 약간의 오류가 발생합니다. 그들이 왜 거기에 있는지, 그리고 그것들을 제거하기 위해 무엇을 해야하는지 이해하는 한, 우리는 그것이 괜찮다는 것을 알았습니다. 무언가가 있었지만 행동으로 인해 우리가 원했던대로 작동 할 것이며, 그 동안 가치를 높이기 위해 많은 생각과 노력을 요구할 것입니다 (그리고 문법을 복잡하게 만들면 우리는 그것을 내버려 두었습니다. 오류를 완전히 이해하고 오류를 완전히 이해하고 어딘가에 문서화하여 항상 무슨 일이 일어나고 있는지 알 수 있습니다.

일단 문제가 실제로 관여되면 비용/혜택 분석이지만, IMHO는 먼저 고려해야합니다. 그런 다음 실제로 작업이 무엇인지 알아 내야합니다 (그리고 그 작업이 다른 것을 깨뜨 리거나 다른 것을 더 어렵게 만드는 경우). 거기. 평범한 곳으로 전달하지 마십시오.

문법이 모호하지 않다는 것을 증명해야 할 때, 나는 그것을 먼저 다음으로 쓰는 경향이 있습니다. 표현 문법을 구문 분석, 그런 다음 프로젝트 요구에 사용하는 도구 세트의 문법 유형이든 손으로 수작업으로 변환하십시오. 내 경험에 따르면,이 수준의 증거에 대한 필요성은 매우 드 rare니다. 그러나 내가 겪은 대부분의 교대/감소 충돌은 (예 : 예를 들어)의 정확성을 보여주기 위해 상당히 사소한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top