2010-07-25 5 views
1

나는이처럼 보이는 파일을 구문 분석 할 수있다 : 나는 처음부터 작성된 파서가GOLD Parser Grammar를 향상시킬 수 있습니까?

versioninfo 
{ 
    "editorversion" "400" 
    "editorbuild" "4715" 
} 
visgroups 
{ 
} 
world 
{ 
    "id" "1" 
    "mapversion" "525" 
    "classname" "worldspawn" 
    solid 
    { 
     "id" "2" 
     side 
     { 
      "id" "1" 
      "plane" "(-544 -400 0) (-544 -240 0) (-272 -240 0)" 
     } 
     side 
     { 
      "id" "2" 
      "plane" "(-544 -240 -16) (-544 -400 -16) (-272 -400 -16)" 
     } 
    } 
} 

를하지만, 내가 추적 할 수없는 몇 가지 버그를 가지고 있으며, 나는 그것이 어려울 수 있습니다 상상 나중에 형식이 변경되면 유지 보수하십시오. 대신 GOLD 구문 분석 시스템을 사용하여 파서를 생성하기로 결정했습니다. 내 문법은 다음과 같습니다.

오류가없고 내 2000 라인 테스트 파일을 올바르게 파싱합니다. 그러나 이것은 맞춤식 문법을 처음 작성한 것이므로 제대로 수행하고 있는지 확실하지 않습니다.

위의 문법을 개선 할 수 있습니까?

답변

4

아래 내가) 더 나은 성능

1 변경 요청 문법 재귀 규칙을 왼쪽 만들 것 몇 가지 변화입니다. 이것은 골드 파서가 LR 파서를 줄이는 시프트이므로 시프트 감소 작업을 수행하는 측면에서 더 좋습니다.

SectionList :: = 제

  | SectionList Section 

PROPERTYLIST :: =

  | PropertyList Property 

2 부동산

) 만 sectionlist 전에 아닌 다른 년대 사이에 PROPERTYLIST을 가지고 섹션 힘 아래에서 세 번째 규칙. 확인의 요구 사항에 따라

SectionBody :: = PROPERTYLIST

  | SectionList 

      | PropertyList SectionList 

필요한 경우 내가 당신에게 더 도움이 될 수 있습니다 당신이 허락한다면 내가 말하는 언어 알고있다 "는 이것을 받아 들여야을이 동의하지해야" 귀하의 언어에 대한 100 % 그림을 제공하지 않는 샘플 입력보다는 또는 언어 설명도 정의 할 수있는 버그를 알려주십시오.

감사합니다. 브이 레이크 ([email protected])

관련 문제