如果用antlr4與孤島語法作鬥爭,並且我可以使其工作,但我仍然懷疑這是否是「正確」的方式。ANTLR4:Island語法,令牌匹配/跳過
我需要解析:
Some random text
{ }
@if(condition) {
more random text
@foobar
@if (condition2) {
random text {}
}
}
問題在於上下文中:一個「野」 {}是沒有什麼,但如果它是一個{}後面的語言運算符,{}變得有意義。 (閱讀:它打開和關閉塊)
在上述情況下,它會返回以下,假設條件和條件2都爲true:
Some random text
{}
more random text
random text {}
我很困惑哪個路線來接,關於上述的任何建議?
原來實行似乎是匹配的括號:
{ }
@if (true) {
{
foo
bar
} }
產生
{ }
{
foo
bar
}
而
{ }
@if (true) {
{
foo
bar
}
產生解析錯誤。
你能發表你一直在研究的ANTLR語法嗎? –
解析器/詞法分析器位於: https://github.com/igmar/rythm2/blob/master/src/main/antlr4/RythmLexer.g4 https://github.com/igmar/rythm2/blob/master /src/main/antlr4/RythmParser.g4 我還沒有實現涉及問題的部分,因爲我仍然在考慮正確的方法。 –
爲了明確我的意思:當前解析器在 {} 作爲輸入失敗。邏輯:它返回CURLY_OPEN CURLY_CLOSE,根據語法不允許。我可以把它放在一個不容易的模式中,因爲我需要能夠逃脫它。基本上,我想說:匹配},如果你已經看到{第一。 –