Я пишу небольшой, действительно простой парсер паролей в ruby с самоцветом treetop, чтобы просто поэкспериментировать с ним. Тем не менее, это не совсем так, как я хочу, и документация довольно скудная, поэтому трудно понять, что я делаю неправильно. В настоящее время грамматика может соответствовать как символу, так и логическому значению, но не числу. Однако, когда я переключаю порядок в правиле атома, например на bool / number / symbol, он все равно совпадает с первыми двумя, но не с последним. Есть ли в древовидной структуре ограничение, которое означает, что в правиле может быть только два варианта? Кроме того, что-то вроде '(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