2009-02-20 4 views

답변

10

몇 가지 :

  • 문법을 알고 - 적합한 도구를 선택 적절한 형태
  • 에 적어. C++에서 Spirit2x를 사용하거나 antlr, yacc 등과 같은 외부 파서 도구를 선택하십시오.
  • 파서가 필요합니까? 어쩌면 정규 표현식으로 충분할까요? 또는 트릭을 수행하기 위해 perl 스크립트를 해킹 할 수 있습니까? 복잡한 파서 작성에는 시간이 필요합니다.
5

옙. 작성하지 말고 생성하십시오. yacc, ANTLR, Flex/Bison, Coco/R, GOLD Parser generator 등을 사용해보십시오. 기존 파서 생성기가 필요하지 않은 경우에만 수동으로 파서를 작성하십시오.

7

정규 표현식을 과도하게 사용하지 마십시오. 정규 표현식을 사용하는 동안 실제 파싱을 처리 할 권한이 없습니다. 당신은 그들을 밀어 낼 수 있습니다,하지만 결국 벽에 부딪 치거나 유지가 불가능한 엉망으로 끝날 것입니다. 더 큰 언어 집합을 처리 할 수있는 파서 생성기를 찾는 것이 좋습니다. 도구에 들어가기를 정말로 원하지 않는다면 재귀 적 파생 파서를 살펴볼 수 있습니다. 작은 파서를 직접 작성하는 것은 매우 간단한 패턴입니다. 그것들은 큰 파서 생성기만큼 유연하지도 강력하지도 않지만 학습 곡선이 훨씬 짧습니다.

성능 요구 사항이 매우 까다로운 경우가 아니라면 레이어를 별도로 유지하십시오. 즉, 렉서가 개별 토큰을 읽고 파서가 트리에 정렬 한 다음 의미 분석을 통해 모든 항목을 확인하고 참조를 연결 한 다음 최종 생산되는 모든 것을 출력하십시오. 논리의 다른 부분을 별도로 유지하면 나중에 유지 관리하기가 더 쉬워집니다.

3
  • 파서의 종류를 선택하십시오. 때로는 재귀 적 하위가 충분할 수 있으며, 때로는 LR 파서를 사용해야합니다 (또한 많은 유형의 LR 파서가 있습니다).
  • 복잡한 문법을 ​​사용하는 경우 추상 구문 트리를 작성하십시오.
  • 렉서에 들어가는 내용, 구문의 일부는 무엇이며 의미는 무엇인가?
  • 파서를 가능한 한 렉서 구현에 최소한으로 결합 시키십시오.
  • 사용자에게 훌륭한 인터페이스를 제공하여 파서 구현에 대해 알지 못합니다.
18

받은 지혜는 파서 생성기 + 문법을 사용하는 것이고, 당신이 엄격한 도구를 사용하고 있으며 그렇게 할 때 버그가 발생할 가능성이 줄어들 기 때문에 좋은 조언처럼 보입니다.

파서 생성기를 사용하려면 문법에 컨텍스트가 없어야합니다. languauge가 파싱되도록 ​​디자인한다면, 이것을 제어 할 수 있습니다. 확실하지 않은 경우 문법 경로를 시작하면 많은 노력을 기울일 수 있습니다. 문맥이 엄청나지 않는 한 실제로 문맥이 없더라도 코드를 재귀 적으로 괜찮은 파서에 건네는 것이 더 간단 할 수 있습니다.

컨텍스트가없는 것은 파서 생성기를 가능하게 할뿐만 아니라 손으로 코딩 한 파서를 훨씬 단순하게 만듭니다. 당신이 끝내는 것은 문구 하나당 하나 또는 두 개의 기능입니다. 코드를 체계적으로 정리하고 이름을 지어주는 것이 문법보다 훨씬 어렵지 않습니다 (IDE에서 계층 구조를 호출 할 수 있다고 표시하면 문법이 무엇인지 알 수 있습니다).

장점 : -

  • 간단한 빌드
  • 더 나은 성능
  • 작은 편차를 극복 할 수
  • 출력의
  • 더 나은 제어, 예를 들어, 문맥은 100 % 컨텍스트가없는 문법으로 작업하십시오.

저는 문법이 항상 부적절하다고 말하는 것은 아니지만, 종종 이점이 최소화되고 비용과 위험에 의해 종종 무게가 나가게됩니다.

는 (나는 그들에 대한 인수가 speciously 호소하고 그들에 대한 일반적인 편견이 있다고는 하나 이상의 컴퓨터 과학 문맹임을 신호의 방법으로 생각합니다.)

2

첫째,하지 마세요 모든 것을 파싱하는 데 동일한 기술을 적용합니다. IP 주소 (약간의 임시 코드)에서부터 C++ 프로그램 (기호 테이블의 피드백이있는 산업 강도의 파서가 필요함) 및 사용자 입력 (매우 처리되어야하는) 빠른) 컴파일러 (일반적으로 약간의 시간을 파싱 할 여유가 있습니다). 유용한 답을 원한다면 무엇을하고 있는지 지정할 수 있습니다.

둘째, 구문 분석 할 문법을 염두에 두십시오. 더 복잡할수록 더 정형화 된 사양이 필요합니다. 너무 형식적인 측면에서 실수를 시도하십시오.

셋째, 글쎄, 당신이하는 일에 달려 있습니다.

7

먼저 Dragon book의 대부분을 읽으십시오.

구문 분석기를 작성하는 방법을 알고 있다면 구문 분석기가 복잡하지 않지만 충분한 시간 내에 넣으면 결과적으로 얻을 수있는 유형의 구문 분석기가 아닙니다. 기존 지식 기반을 기반으로 구축하는 것이 좋습니다. (그렇지 않으면 그것을 쓰고 그것을 몇 번 던져 버릴 것을 기대한다).