4

파서를 쓰고 있는데, 그 중 하나가 일치해야하며 큰 따옴표로 묶인 문자열 내용을 가져와야합니다. 따옴표 만 올 수 있지만 전체 문자열은 아닙니다. \ "(> StringWrapper ->"지시문 " Parboiled로 큰 따옴표로 묶인 문자열 내용 추출하기

  • 예상 출력 -

    • 입력 :

      def doubleQuoted: Rule1[StringWrapper] = rule { //same for singlequoted 
          "\"" ~ zeroOrMore(noneOf("\"\\") | ("\\" ~ "\"")) ~ "\"" ~> StringWrapper 
      } 
      

      문제는 다음과 같습니다 인용 부호로 둘러싸이지 않은 것들에 대한 모든 것이 여기

      는 해당 규칙입니다 잘 작동합니다 "directive \" ")
    • 실제 출력 -> StringWrapper ("\ "")
  • 답변

    1

    사실 나는 해결책을 발견했습니다!

    이 코드는 잘 작동합니다. 실제로, 내 IDE는 이전 예제의 코드 부분이

    이 Rule0 유형임을 강조했습니다. 나는 규칙 1에 그것을 강요했다 그리고, 지금 그것이 효과가있다.

    def doubleQouteBody: Rule1[StringWrapper] = rule { 
        zeroOrMore(noneOf("\"\\") | ("\\" ~ "\"")) ~> StringWrapper 
    } 
    
    def doubleQuoted: Rule1[StringWrapper] = rule { //same for singlequoted 
        "\"" ~ doubleQouteBody ~ "\"" 
    } 
    
    2

    빠른 구문 분석을 위해 normal* (special normal*)* 패턴을 사용할 수 있습니다. Java에서 :

    Rule Normal() 
    { 
        return NoneOf("\\\""); 
    } 
    
    Rule Special() 
    { 
        return String("\\\""); 
    } 
    
    Rule NSN() 
    { 
        return Sequence(
         ZeroOrMore(Normal()), 
         ZeroOrMore(Special(), ZeroOrMore(Normal())) 
        ); 
    } 
    
    Rule DoubleQuotedString() 
    { 
        return Sequence('"', NSN(), '"'); 
    } 
    
    관련 문제