3

;私はSMIEを使用して、ステートメントを終了する必要がない言語を解析しています。{}行の終わりが中括弧構造( 、、)の外側にあり()[]最後の非コメントトークンが演算子ではなかった場合\n、ステートメントターミネータとして機能します。それ以外の場合、行の終わりが中括弧内にあるか、最後のトークンが演算子である場合、\n継続として機能します。

例えば、

variable := 172 + 92; 

variable := 172 + 92

variable :=
    172 + 92;

variable :=
    172 + 92

variable := (172 +
    92)

すべて有効なステートメントです。だが、

variable 
    := 172 + 92

ではありません。

これをSMIEのBNF文法(または初心者向けのBNF)にエンコードするにはどうすればよいですか?または、それは不可能ですか?

これをレクサーに入れて必要に応じてトークンを追加する方法を理解して;いますが、可能であれば文法に入れたいと思います。

4

1 に答える 1

3

いいえ、BNFでエンコードすることはできません(SMIEはそれを表現できない非常に弱いBNFしか受け入れないため)。オクターブモードでどのように実行したかを見てください。中括弧/角かっこ/パレン(で確認できます)の外側にあるa";"に遭遇すると、トークナイザーが返されます。\n(zerop (car (syntax-ppss)))

于 2013-03-13T18:15:06.077 に答える