2010-03-20 5 views
1

나는 ANTLR로 놀고있어 JavaScript로 파싱 해보기로했다. 그러나 나는 선택적 ';'을 다루는 벽을 쳤다. 여기서 문 끝은 개행으로 표시됩니다. 몇 가지 간단한 방법으로 끝낼 수 있습니까? 나는이 (자바 스크립트 파서에 의해 해석 될 수있다)ANTLR, 선택 사항 ';' JavaScript in

var i = 
10 
10; 

PS를 구문 분석 할 수 있기를 원하고

grammar optional_newline; 
def   : statements ; 
statements : statement (statement)* ; 
statement : expression (';' | '\n') ; 
expression : ID | INT | 'var' ID '=' INT ; 
ID   : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; 
INT   : '0'..'9'+ ; 
WS   : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;} ; 

작동하지 않습니다

그냥 간단한 문법 예 : I 돈 파서 규칙에 WS을 넣고 싶지는 않습니다. 렉서가 그 규칙을 없애면 훨씬 행복해집니다. 이 자바 스크립트에서 가능한 모든 경우에 작동하는지

+0

을 ANLR 위키에 게시 됨 : http://www.antlr.org/grammar/list? –

+0

@Bart, 예, 그렇습니다.하지만 거기에는 모든 규칙에서 공백이 허용됩니다. 나는 그게 유일한 방법이라고 생각합니다. 그러나 나는 틀렸다고 생각하고 누군가 문법을 엉망으로 만들지 않고이 문제를 해결하는 방법을 알고 있습니다. – vava

+0

나는 네가 가진 줄 알았지 만 확실히하고 싶었다. 나는 그것에 대해 생각할 것이다. 비록 주위에 아무런 의심이 없지만 ... –

답변

0

는 잘 모르겠어요,하지만 제대로 예를 구문 분석 : 난 당신이 ECMA 스크립트의 문법을 검토 한 결과 추정

grammar js; 

def   : statements ; 
statements : statement (statement)* ; 
statement : expression ';'? ; 
expression : ID | INT | 'var' ID '=' INT ; 
ID   : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; 
INT   : '0'..'9'+ ; 
WS   : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;} ; 

alt text http://img249.imageshack.us/img249/7131/parsetree.jpg

+0

그러나 그것은 또한 '10 10 '을 구문 분석 할 것이다. 허용되지 않는다. – vava

+0

세미콜론이 필요한 곳과 어디에 있어야 하는지를 설명 할 수 있겠는가? 선택적일까요? 자세한 내용은 javascript 구문을 살펴 봐야 할 것입니다. 잠시 시간이 걸릴 수 있습니다. – stmax

+0

'다소 쉽습니다.'; 문장의 끝은 개행 문자로 대체 될 수 있습니다. 그러나 다른 모든 경우에 줄 바꿈은 무시됩니다. – vava