J'écris un petit analyseur lisp en rubis avec la gemme de la cime des arbres pour l'expérimenter. Cependant, ça ne marche pas vraiment comme je le veux, et la documentation est assez pauvre donc il est difficile de comprendre ce que je fais de mal. Actuellement, la grammaire peut correspondre à la fois à un symbole et à un booléen, mais pas à un nombre. Cependant, quand je change l'ordre dans la règle d'atome, par exemple à bool/number/symbol, il correspond toujours aux deux premiers, mais pas au dernier. Y at-il une limite dans la gemme de la cime des arbres qui signifie que vous ne pouvez avoir deux options dans une règle? De même, quelque chose comme '(3)' n'analyse toujours pas.Problème avec la grammaire de la cime des arbres, ne correspondant pas à toutes les options
Ma grammaire est la suivante:
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
Je teste comme ils ont fait preuve dans le tutoriel, avec:
parser = LispParser.new
if parser.parse('T')
puts "Success"
else
puts "Fail"
end
Merci qui fonctionne parfaitement maintenant. – bennybdbc
@bennybdbc: De plus, comme la règle atom est définie maintenant, elle ne correspondra jamais à un booléen, car 'T' et' F' correspondent aussi à l'expression rationnelle dans la règle 'symbol', donc ils seront toujours analysés comme un 'symbole'. –
@Jorg - Oui merci, je l'ai remarqué plus tôt. J'ai changé le code dans mon programme, je n'ai juste pas pensé à éditer la question. – bennybdbc