0

スコープに中かっこを使用しないため、場合によっては空白に依存するLuaを解析しようとしています。別のルールが一致しない場合にのみ空白を捨てるのが最善の方法だと思いますが、それを行う方法がわかりません。誰かが私を助けることができますか?

4

1 に答える 1

1

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

スペースを考慮する必要はありません、AFAIK。したがって、次を追加するだけです。

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'

ご覧のとおり、これは正しいものです。

于 2009-12-10T11:15:20.503 に答える