2017-12-11 20 views
1

Antlr을 처음 사용하고 문자열을 선택적으로 토큰 화하기 위해 문법을 작성하려고합니다. 나는 이것을보기 위해 어디서 볼지와 접근법에 관한 도움이나 조언을 정말 고맙게 생각합니다.antlr - 선택적으로 문자열을 토큰 화 함

section2 
: 'section2' '{' 
'disabled' a_disabled=NL 
'}' 
; 

이는 문자열을 토큰 화 끝 '비활성화'예

는 "비활성화"문자열

section1 { 
    property1 disabled 
} 
section2 { 
    disabled 
} 
section3 { 
    property2 disabled 
} 

문법, 다양한 위치에서 장치의 출력에 나타나는 그 결과 ""가 property1과 property2에 할당되는 반면, 의도는 섹션 2에서 "비활성화 됨"을 토큰 화하고이를 a_disabled에 할당하는 것입니다. 예상 JSON 출력은 다음과 같습니다

{"section1": 
    { 
    "property1": "disabled" 
    }, 
"section2": 
    { 
    "disabled": "true", 
    }, 
"section3": 
    { 
    "property2": "disabled" 
    }, 
} 

내가 정확히 2 장을 지정 작성된 코드가 "사실"에 장애인을하지만, 속성 1과 property2 값이 때문에 ""할당받을.

{"section1": 
    { 
    "property1": "" 
    }, 
"section2": 
    { 
    "disabled": "true", 
    }, 
"section3": 
    { 
    "property2": "" 
    }, 
} 

ANTLR 디버그 출력은 "장애인"의 모든 항목이 토큰 화되고 있음을 보여줍니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 문서화를 통해 모드 또는 의미 론적 술어가 작동하는 것처럼 보입니다. Antlr 4.7과 Go도 사용하고 있습니다.

+0

문법을 보여주세요. – user882813

+0

문법으로 업데이트되었습니다. – user9085066

답변

0

난 당신이 설명에서 달성하기 위해 무엇을하려고하는 아주 확실하지 않다, 당신은 '선택적 문자열을 토큰 화'하는 방법 또한 분명하지 않다,하지만 어떻게이 문법에 대해 :

section: ID '{' ID? 'disabled' '}' 

WS : [ \n\u000D] -> skip ; 
ID : [a-zA-Z] [a-zA-Z0-9]* ; 

그리고 그런 다음 나머지는 구문 분석 트리에서 연산을 수행합니까? 자세한 정보를 제공하면 답변을 업데이트 할 것입니다.