Я пишу небольшой, очень простой синтаксический анализатор в рубине с драгоценным камнем в виде верхушки, чтобы поэкспериментировать с ним. Однако на самом деле это не так, как я хочу, и документация довольно бедна, поэтому трудно понять, что я делаю неправильно. В настоящее время грамматика может совпадать как с символом, так и с булевым, но не с числом. Однако, когда я переключаю порядок в правиле атома, например, на 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
Thankyou, который отлично работает сейчас. – bennybdbc
@bennybdbc: Также, как теперь определено правило 'atom', оно никогда не будет соответствовать логическому, потому что' T' и 'F' также соответствуют регулярному выражению в правиле' symbol', поэтому они всегда будут анализироваться как символ. –
@Jorg - Да, спасибо, я заметил это раньше. Я изменил код в своей программе, я просто не думал редактировать этот вопрос. – bennybdbc