문제

나는 LUA를 구문 분석하려고 시도하고 있습니다. LUA는 스코프에 중괄호를 사용하지 않기 때문에 일부 경우에 공백에 의존합니다. 나는 다른 규칙이 일치하지 않는 경우에만 공백을 버려서 가장 좋은 방법이지만, 그렇게하는 방법은 없습니다. 누군가 나를 도울 수 있습니까?

도움이 되었습니까?

해결책

보고 있습니다 루아의 문서, 나는 공백을 고려할 필요가 없다.

파서 규칙 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

공간을 고려할 필요가 없습니다. 따라서 추가 할 수 있습니다.

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

당신의 문법에서.

편집하다

Antlr Wiki에 Lua 문법이있는 것 같습니다. http://www.antlr.org/grammar/1178608849736/lua.g

IF 문에 대한 제안은 위의 문법과 약간 다른 것 같습니다.

'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'

당신이 볼 수 있듯이 올바른 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top