- Literal
- リテラル(によって生成された値)を指す。自身の値を指す @value という属性を持つ。
- Identifier
- 識別子。特別なリテラルと考えられるので、Literal を継承する。別のリテラル(Identifier も含む)を参照し、値として持つことが可能。また、自身の文字列表現を表す @name という属性を持つ。
Literal には自身とマッチする正規表現を属性と持たせる? Evaluater という Sketchy で書かれた自身の処理系を他言語における eval 相当のものと考えて、任意のリテラルを Evaluater に追加させることもできる?(JSON のようなある言語のリテラルをもとにした別の軽量言語を定義しやすくする?)
以下、擬似的なコード例。とりあえず Ruby っぽいコードで。
my_lexer = Evaluater::Lexer.new(String: /.../, Number: /.../, ...) my_parser = Evaluater::Parser.new(lexer: my_lexer) my_parser.eval(input)