2014-03-24 4 views
-1

이것은 아마도 명백한 질문 일 뿐이지 만 나는 그것에 대한 도움을 찾을 수없는 것 같습니다.ANTLR 4 모든 토큰이 표시되는 것은 아닙니다.

body Body = new body 
Body.margin = 0 
Body.padding = 0 
div Container = new div 
Container.width = 900px 
Container.margin = 0 auto 
div Header = new div 
Header.width = 890px 
Header.padding = 0px 
end 
div Leftbox = new div 
Leftbox.width = 200px 
Leftbox.float = left 
end 
div Rightbox = new div 
Rightbox.width = 700px 
Rightbox.float = right 
end 
clear 
end 
end 

그러나 다음 순간 나는 간단한 명령을 입력 할 수있는 문법을 가지고하는 것은 나중에 자바

grammar CoCodemol; 
r : file; 
file 
    : line* 
    ; 

line 
    : Newtype 
    | Assignment 
    | Clear (LineBreak)? 
    | End (LineBreak)? 
    ; 

Newtype 
    : Types Space Num* Space? '=' Space? 'new' Space Types (LineBreak)? 
    ; 

Assignment 
    : Num* '.' Variables Space? '=' Space? NumS* (LineBreak)? 
    ; 

Types 
    : 'body' 
    | 'div' 
    | 'span' 
    | 'html' 
    ; 

Variables 
    : 'width' 
    | 'height' 
    | 'background' 
    | 'margin' 
    | 'margin-left' 
    | 'margin-right' 
    | 'margin-top' 
    | 'margin-bottom' 
    | 'padding' 
    | 'padding-left' 
    | 'padding-right' 
    | 'padding-top' 
    | 'padding-bottom' 
    | 'float' 
    ; 

Declarations 
    : 'new' 
    ; 

End 
    : 'end' (LineBreak)? 
    ; 

Clear 
    : 'clear' (LineBreak)? 
    ; 

Num : ([0-9]|'a'..'z'|'A'..'Z')+; 
NumS : ([0-9]|'a'..'z'|'A'..'Z'|' ')+; 



Space 
    : ' ' 
    ; 


LineBreak 
    : '\r'? '\n' 
    | '\r' 
    ; 

이 포함 된 파일을 읽을 자바와 함께 사용을 통해 HTML로 나눌 수 모든 토큰을 인쇄하기 위해 렉서를 반복합니다. 할당, Newtype, Clear 및 End 만 수신합니다. 토큰이 조금 더 깊이 들어가고 자바에 어떤 단어가 매치되는지 (Num, Variable 등), 줄 (Assignment, Newtype, Clear 및 End)이 유일한 것으로 보입니다. .

제안 사항? (나는 문법이 끈적 끈적하다는 것을 알고 있습니다. 언어를 배우려고 시도하는 동안 처음 시도합니다.)

답변

2

ANTLR에 Newtype과 같은 토큰과 거의 모든 것을 일치시킬 것을 요청했습니다. newType을 렉서 규칙이 아닌 파서 룰로 사용하십시오.

+0

모양을 만들기 시작했습니다. 도움을 주셔서 대단히 감사합니다. (추신 : 저는 +15 담당자가 이것을 투표로보고 싶습니다. 왜냐하면 분명히 허용되지 않기 때문입니다.) –

+0

+1, 저기 .. – MrCodeMnky

+1

James, 대답을 받아 들일 수 있어야합니다. 답변 포인트에서 체크 표시를 클릭하십시오. –

관련 문제