私は小さな、本当に単純な Lisp パーサーを ruby で書いて、treetop gem を試してみました。しかし、それは私が望むようにうまく機能していません.ドキュメントはかなり貧弱であるため、私が間違っていることを理解するのは困難です. 現在、文法は記号とブール値の両方に一致しますが、数値には一致しません。ただし、アトム ルールの順序を、たとえば bool / number / symbol に切り替えると、最初の 2 つには一致しますが、最後の 1 つには一致しません。ツリートップ ジェムには、1 つのルールで 2 つのオプションしか持てないという制限はありますか? また、「(3)」のようなものはまだ解析されません。
私の文法は次のとおりです。
grammar Lisp
rule expression
atom / list
end
rule atom
symbol / bool / number
end
rule number
[0-9]*
end
rule bool
'T' / 'F'
end
rule symbol
[a-zA-Z]*
end
rule list
'(' expression* ')'
end
end
チュートリアルで示したように、次のようにテストしています。
parser = LispParser.new
if parser.parse('T')
puts "Success"
else
puts "Fail"
end