2012-01-09 6 views
0

내 ATG 파일은 다음과 같이 블록을 가로 질러 오는는 욕심하지 코코/R 파서를받는 방법

Codeblock = "<#" {anychar} "#>" 

같은 코드 블록을 정의 픽업

a=5; 
print "Hello 

이것은 내가 원하는 것입니다. 그러나

, 그것은 다음과 같은 코드를 통해 제공 :

<# 
    a=5; 
    print "Hello World"; 
#> 
<# 
    b=5; 
    print "Foo Bar"; 
#> 

토큰은, 탐욕 집어

a=5; 
print "Hello World"; 
#> 
<# 
    b=5; 
    print "Foo Bar"; 

어떻게 코코/R이 작업을 수행하지 알릴 수? ";"로 종료 anychar을 만들어

codeblock = "<#" {anychar} "#>" . 
anychar = (expression|procedure) ";" . 

:

답변

0

이 시도 그러면 cocor는이 패턴으로 임의의 문자를 잘못 해석 할 수 없습니다. "#> < #"

+0

이미'anychar = ANY.'로 정의 anychar이 그 세미콜론이 포함되어 있으므로. 또한, 세미콜론이 endline으로 사용되기 때문에 anychar에서 제외 할 수 없습니다. – xbonez

+0

'ANY'이 (가) 너무 많습니다. 대신에 "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"을 사용하십시오. – coffeeground

+0

'anychar = (표현식 | 프로 시저) ";" EOL .' 여기서 'EOL = CHR (10).' 캐릭터 섹션 – coffeeground

0

터미널이 더 명시 적이어야합니다.

는 "ANY"는 #><# 구문 분석하는 이유, 당신의 코드 블록이 세트의 일부로서 첫 번째 <# and LAST #> 사이에 모든 것을 취급 할 것입니다 모호성을 소개합니다 "ANY"그 문법은 코드 블록을 정의 어떻게 때문이다.

아마도 시도 :

code = codeblock {codeblock} EOF 
codeblock = "<#" {anychar} "#>"