fixedpoint.jp


A lexical quirk of R6RS (2008-06-30)

追記: ypsilon の最新の trunk では下記の振る舞いは変更されチェックが行われています。

少し前に #scheme で指摘されたのですが、R6RS では "Lexical syntax" の節(4.2.1)で

<Identifier>s, ., <number>s, <character>s, and <boolean>s, must be terminated by a <delimiter> or by the end of the input.

とうたわれています。これと「<delimiter>#\, が含まれていない」ことにより、

`(10,x)

は(x がどうであれ)lexical error にならなければなりません。つまり

`(10 ,x)

とは区別されるのです。実際、ikarus では前者に対して '"10," is not a nice number' という字句上のエラーを上げるそうです。一方、最近イチオシの ypsilon 0.9.5 では両者を区別していないのでまずいです。

この仕様に合わせるためには、字句上のエラーとして捕捉するよう EBNF で書かれた字句の規則とは別にチェックをしなければならない、というのが厄介なところです。

参考


© 2006-2023 fixedpoint.jp