문제

나는 회사 내에서 20 살짜리 독점 언어를 강화하는 데 도움을주었습니다. 크고 튜링에 대한 언어입니다. 그것을 다른 문법 체제 (예 : Antlr)로 번역하는 것은 옵션이 아닙니다 (나는 이것을 결정할 수 없습니다).

대부분의 경우 문법을 연장하는 것이 순조롭게 진행되었습니다. 그러나 한 번에 한 번씩 나는 감소 감소 또는 시프트 레디스를 얻을 것입니다.

  • 제거하기가 어렵습니다
  • 때때로 (내 연약한 두뇌에) 말이되지 않습니다.

많은 고통스러운 쳐다보고 y.output 파일과 실험 문법 리팩토링, 나는 보통 내가 가고 싶은 곳을 얻었습니다. 때로는 불만족스러운 타협을해야했습니다.

그렇다면 YACC 문법을 빨아 들여 탐색, 실험을 향상시키고 변경을 디버깅 할 수있는 도구가 있습니까?

생산을 추가하면 "모든 곳에서 사용되는 원자 생산"(식별자 생각) ""Rule Foo와의 충돌 "(예, 더 많은 정보, S/R, R/R이 있습니다. , 그러나 나는 당신이 내 드리프트를 얻는 것 같아요). 내 사고 캡을 넣고 심볼 스택과 상태 기계를 상상하려고하는 것 이상의 상호 작용의 힌트를 얻는 것이 좋을 것입니다.

업데이트 : 명확히해야한다고 생각합니다. 우리는 Berkeley YACC를 사용합니다. 최근 버전의 Bison을 사용하여 테스트하고 있습니다. 출력을 위해 문법을 컴파일했습니다 --report = itemset.

이 게시물의 목표는 찾는 것입니다 외부 도구 보강 YACC와 함께 배송되는 문법 디버깅 시설. 오늘 기본 세트로 고통 스럽습니다. Antlr에서 사용할 수있는 것과 같은 더 나은 대화 형 도구를 찾도록 도와주세요.

도움이 되었습니까?

해결책

~할 것 같다 도움을 받으십시오 yacc -d, 디버깅 출력을 생성하는 것은 기본적으로 기호 스택 상태 등의 전체 목록을 제공합니다. 출력은 밀도가 높고 방대한 규모이므로 모든 것을 직접 읽으려고 노력하는 것은 거의 많은 것을 성취하지 못합니다 (어쨌든 나를 위해 결코 없음). 그러나 변경을 변경하면 (예를 들어) R/R 충돌을 제공하면 실행할 수 있습니다. yacc -d 오래된 문법과 새로운 문법에서는 결과에 대한 Diff를 실행하여 변화가 분쟁의 원인에 대해 훨씬 더 상세한 런 다운을 얻습니다.

그러나 S/R 갈등은 종종 양성이라는 점에 주목할 가치가있을 것입니다. 문제가되는 것이 상당히 확신하지 않는 한, 종종 가치가없는 "고치는"것을 시도하는 것이 아닙니다. R/R 충돌도 마찬가지입니다. 이것들입니다 때때로 양성, 비교적 드문 일입니다.

편집 : 죄송합니다 -죄송합니다. 당신은 y.output를 언급하므로 이미 그 부분을 수행하는 방법을 알고 있습니다. 요점은 y.output 파일을 직접 보려고하지 않지만 깨끗하게 나온 파일과 실제 충돌에 대한 세부 사항을 얻지 못한 파일 사이에 차이가 있다는 것입니다 (10을 쳐다 보지 않고 "물건"의 율리온 라인은 괜찮습니다.

다른 팁

이것은 내가 얻은 최고입니다.http://tldp.org/howto/lex-yacc-7.html

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