1
AntlrWorks에 따르면 입력 {'AND','OR'..'XOR'}
은 두 가지 방법으로 비교할 수 있습니다. 그래픽 디스플레이를 사용해도 일치하는 상황을 파악할 수 없었습니다! 아래 문법에 모호성이 발생하는 이유는 무엇이며 어떻게 제거 할 수 있습니까?ANTLR 문법의 모호함
grammar testg;
rul : contains_expr ;
contains_expr: 'CONTAINS' contains_expression
//'CONTAINS' contains_or
;
contains_expression : primary (('OR'|'AND'|'XOR') primary)*
;
primary options{backtrack = true;}
: '(' contains_expression ')'
| class_expression
;
class_expression : simple_class_expr
| '(' simple_class_expr contains_expr ')'
|(simple_class_expr contains_expr)
;
simple_class_expr: identifier // RM_TYPE_NAME
| identifier identifier // RM_TYPE_NAME variable
| archetype_class_expr
| versioned_class_expression
| version_class_expression
// | identified_obj_expression // need to be used once VersionedClassExpr is removed
;
identifier
: ID
;
archetype_class_expr
: '.ace'
;
versioned_class_expression
: '.vce'
;
version_class_expression
: '.vnce'
;
temp :
;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
sarnold는 ANTLR이 문법에 대해 불평하는 이유를 이미 설명했습니다. 그래도 도움이 필요하면 문법 만 게시하는 대신 문법을 작성하려는 * 언어 *를 설명하십시오. 몇 가지 예를 들어 설명해 주시겠습니까? 혼자 문법을 들여다 보면서 구문 분석하려고하는 언어를 알아내는 데 어려움이 있습니다. –
안녕 바트. 이것은 openEHR의 Archetype Query Language의 Antlr 포트에서 발췌 한 것입니다. http://www.openehr.org/wiki/display/spec/Archetype+Query+Language+Description 기존 문법은 LR 파서 생성기로 작성되었으므로, 왼쪽 재귀와 LR 파서로 쉽게 할 수있는 다른 것들을 없애려한다. 나는 sarnold와 syntactic 술어 덕분에 여기서 질문 한 문제를 해결할 수 있었다. 아마도 더 많은 Antlr 질문을해야 할 것입니다 :) – mahonya
다음 문법을 알고 있습니까? (그것을 테스트하지 않았다!) –