2017-04-24 3 views
0

지금 당장 수업을 듣기 위해 ANTLR4를 사용하고 있는데 대부분 이해하고있는 것처럼 보이지만 '+'는 무엇인지 알 수 없습니다. 내가 말할 수있는 것은 보통 대괄호 안에 일련의 문자가있는 것입니다.ANTLR4 '+'operation

답변

0

플러스는 표현식의 카디널리티를 결정할 수있는 ANTLR의 BNF 연산자 중 하나입니다. 그 중 3 개가 있습니다 : plus, star (일명 kleene 연산자) 및 물음표. 없거나 : 하나 이상의

  • 스타에 대한 약자의 약자 0 또는 1
  • 플러스 :

    • 물음표에 대한 스탠드 : 의미는 쉽게 이해할 수있다 더보기

    이러한 연산자는 직접 앞에 오는 표현식에 적용됩니다 (예 : ab+ (a 하나 및 하나 이상의 b) [AB]? (영 또는 A 또는 B 중 하나) (b, c 또는 d 중 0 개 이상의 회 발생 하였다 a) 또는 a + (b | c | d)*.

    ANTLR4는 또한 ungreedy 일치를 나타내는 특수 구조를 사용합니다. 구문은 BNF 연산자와 물음표 (+?, *?, ??) 중 하나입니다. 이 기능은 인트로 듀서 검색, 모든 컨텐츠 및 클로징 토큰과 일치 할 때 유용합니다. 예를 들어 문자열 (quote, any char, quote)을 생각해보십시오. 욕심이 일치하는 ANTLR4는 여러 문자열을 하나로 일치시킵니다 (마지막 인용문까지). 그러나 ungreedy 일치는 처음 발견 된 끝 토큰 (여기서는 quote char)까지만 일치합니다.

    사이드 노트 : 하나의 항목과 일치하므로 ??이 유용 할 수 있습니다. 따라서 욕심은 여기에서 중요한 역할을하지 않습니다.

    사실,이 연산자는 전통적인 BNF가 아니라 Extended Backus-Naur Form의 일부입니다. 이것들은 EBNF에서 특정 문법을 문서화하는 것이 이러한 연산자가 부족한 구식 BNF보다 쉽다는 (또는 가능할 수도 있습니다) 이유 중 하나입니다.

  • +0

    고맙습니다. 나는 이것을 게시 한 직후에 나 자신을 알아 냈다. 내가 할 일은 대신 정규 표현식 명령을 찾는 것이 었습니다. 그러나 당신의 예제는 제게 도움이됩니다. – Alex5775

    +0

    또 하나의 질문입니다. 내 수업 예 중 하나에서 *를 사용 했습니까? 이 경우 *가 중복되는 것을 수정합니까? – Alex5775

    +0

    아, 그 특별한 경우는 언급하지 않았다. 내 대답을 업데이트하겠습니다. –