2009-12-10 6 views
0

범위를 위해 중괄호를 사용하지 않기 때문에 공백에 의존하는 Lua를 구문 분석하려고합니다. 다른 규칙이 일치하지 않는 경우에만 공백을 제거하는 것이 가장 좋은 방법이라고 생각하지만 그 방법을 찾을 방법이 없습니다. 누군가 나를 도울 수 있습니까?공백을 제거하지만 마지막으로 사용합니까?

+0

나는 Lua에 대한 경험이 없으므로, 공백을 무시할 수 없을 때 (예를 들어'$ channel = HIDDEN'을 쓰면) 예제를 줄 수 있습니까? –

+0

예를 들어 if 문법은 다음과 같습니다 :''''''''''''''''''''''''''''''이고 공백은 식별 단어가 올바르게 읽혀 지도록 중요합니다. – RCIX

답변

1

Lua's documentation에서 보니 공백을 고려하지 않아도됩니다.

파서 규칙 ifStatement :

ifStatement 
    : 'if' exp 'then' block ('elseif' exp 'then' block 'else' block)? 'end' 
    ; 

exp 
    : /* todo */ 
    ; 

block 
    : /* todo */ 
    ; 

가 모두 일치해야합니다 :

if j==10 then print ("j equals 10") end 

과 :

if j<10 then 
    print ("j < 10") 
elseif j>100 then 
    print ("j > 100") 
else 
    print ("j >= 10 && j <= 100") 
end 

AFAIK, 계정으로 공간을 필요가 없습니다. 따라서 다음을 추가 할 수 있습니다 :

Space 
    : (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;} 
    ; 

문법에 추가 할 수 있습니다.

편집 거기 ANTLR 위키에 루아 문법 보인다

: http://www.antlr.org/grammar/1178608849736/Lua.g

는 그리고 문이 약간 위의 문법과 다른 경우 그것이 내가에게 내 제안을 보인다

'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end' 
보이는대로 올바른

입니다.

+0

Bu 문제는 ifa 또는 thenprint가 유효한 키워드가 아니므로'ifj == 10thenprint ('j equals 10') end'을 컴파일하지 않는 lua의 컴파일러와 일치 시키려고한다는 것입니다. – RCIX

+1

'ifj == 10thenprint ('j = 10') end '구문 분석은 유효한 if 문으로 받아 들여지지 않습니다. 그들 사이에 공백을 지정할 필요가 없습니다. 공백을 숨기는 것으로 충분합니다. –

+0

좋습니다. 도와 주셔서 감사합니다! – RCIX

관련 문제