이것은 언어 프로젝트에 사용 된 개념을 프레임 워크 형태로 추상화하는 것을 목표로하는 추상화 프로젝트의 자매 프로젝트에 중점을 둔 일련의 질문의 일부입니다. 자매 프로젝트는 OILexer라고하며 일치하는 코드 삽입을 사용하지 않고 문법 파일에서 구문 분석기를 구성합니다.
구조 입력과 관련하여 다음 질문에 관련된 일부 다른 페이지는 볼 수 있습니다 여기에 , 사용의 용이성, 발견 여기에 . 프레임 워크에 대한 문의 및 적절한 게시 장소와 관련된 메타 주제는 여기 에서 찾을 수 있습니다 .
주어진 문법에서 구문 분석 트리를 추출하기 시작한 시점에 도달했습니다. 그런 다음 DFA를 사용하여 순방향 경로를 식별하는 재귀 하강 파서가 나옵니다 (ANTLR 4의 LL (*)과 유사). 통찰력을 얻기 위해 그것을 열 것이라고 생각했습니다.
파서 컴파일러에서 어떤 종류의 기능이 이상적입니까?
지금까지 구현 된 내용에 대한 간략한 개요는 다음과 같습니다.
- 템플릿
- 주어진 시점에서 무엇이 유효한지 미리 예측해보십시오.
- '리터럴 화'규칙은 규칙 내에서 리터럴을 가져 와서 어떤 토큰을 사용했는지 확인합니다.
- 비 결정적 오토마타
- 결정 론적 오토마타
- 토큰 인식을위한 간단한 어휘 상태 머신
- 토큰 자동화 방법 :
- 스캔-주석에 유용합니다. 주석 : = "/ *"Scan ( "* /");
- 빼기-식별자에 유용합니다. 식별자 : = 빼기 (IdentifierBody, Keyword);
- 식별자가 키워드를 허용하지 않도록합니다.
- 인코딩-기본 N 전환의 시리즈 X 카운트로 자동화를 인코딩합니다.
- UnicodeEscape : = "\\ u"BaseEncode (IdentifierCharNoEscape, 16, 4);
- 16 진수 4 전환을 사용하여 유니 코드 이스케이프를 16 진수로 만듭니다. 이 코드와 [0-9A-Fa-f] {4}의 차이점은 Encode를 사용한 자동화 결과로, 허용 된 16 진수 값 세트가 IdentifierCharNoEscape 범위로 제한됩니다. 따라서 \ u005c를 지정하면 인코딩 버전이 값을 허용하지 않습니다. 이와 같은 것들에는 심각한 경고가 있습니다. 결과 자동화는 상당히 복잡 할 수 있습니다.
- UnicodeEscape : = "\\ u"BaseEncode (IdentifierCharNoEscape, 16, 4);
구현되지 않은 것은 CST 생성입니다.이 작업을 수행하기 위해 적절한 컨텍스트를 전달하도록 결정적 자동화를 조정해야합니다.
관심있는 사람이라면 누구나 원래 형식의 T * y♯ 프로젝트를 꽤나 올렸습니다 . 각 파일은 다른 모든 파일에 연결되어야하며 개별 규칙에서 연결하기 시작하여 너무 오래 걸렸지 만 (자동화하기가 더 쉬웠을 것입니다!)
더 많은 컨텍스트가 필요한 경우 그에 따라 게시하십시오.
편집 5-14-2013 : 주어진 언어 내에서 상태 시스템에 대한 GraphViz 그래프를 작성하는 코드를 작성했습니다. AssemblyPart의 GraphViz digraph는 다음과 같습니다 . 언어 설명에 링크 된 멤버는 상대 규칙에 해당 규칙의 digraph와 함께 rulename.txt가 있어야합니다. 예제를 게시 한 후 일부 언어 설명이 변경되었습니다. 이는 문법에 대한 사항을 단순화했기 때문입니다. 흥미로운 graphviz 이미지가 있습니다.