Ihre Eingabe beginnt mit 1
, die passt sowohlnumber
und string
(durch word
), aber Sie Treetop sagte der number
Interpretation bevorzugen, so dass er es als number
analysiert. Wenn es in der Eingabe zu der a
a
kommt, hat es keine Regeln mehr zu gelten und daher gibt es nichts (nil
) zurück, da es in Treetop ein Fehler ist, den gesamten Eingabestream nicht zu verbrauchen.
SyntaxNode+String0 offset=0, "123abc wer" (word,space,string):
SyntaxNode offset=0, "123abc":
SyntaxNode offset=0, "1"
SyntaxNode offset=1, "2"
SyntaxNode offset=2, "3"
SyntaxNode offset=3, "a"
SyntaxNode offset=4, "b"
SyntaxNode offset=5, "c"
SyntaxNode offset=6, " ":
SyntaxNode offset=6, " "
SyntaxNode offset=7, "wer":
SyntaxNode offset=7, "w"
SyntaxNode offset=8, "e"
SyntaxNode offset=9, "r"
Oder Sie den Auftrag halten konnte, wie es ist, aber erlauben, die value
Regel:
Wenn Sie einfach die Reihenfolge der Wahl umkehren, wird der gesamte Eingang als string
anstelle eines number
interpretiert mehrfach angepasst werden. Entweder legen Sie eine neue Top-Level-Regel wie folgt aus:
rule values
value+
end
oder ändern Sie die value
Regel wie folgt aus:
rule value
(number/string)+
end
, die Ihnen eine AST gibt ungefähr so:
SyntaxNode offset=0, "123abc wer":
SyntaxNode+Number0 offset=0, "123":
SyntaxNode offset=0, "1"
SyntaxNode offset=1, "23":
SyntaxNode offset=1, "2"
SyntaxNode offset=2, "3"
SyntaxNode+String0 offset=3, "abc wer" (word,space,string):
SyntaxNode offset=3, "abc":
SyntaxNode offset=3, "a"
SyntaxNode offset=4, "b"
SyntaxNode offset=5, "c"
SyntaxNode offset=6, " ":
SyntaxNode offset=6, " "
SyntaxNode offset=7, "wer":
SyntaxNode offset=7, "w"
SyntaxNode offset=8, "e"
SyntaxNode offset=9, "r"
Dank Jörg, Ja, Sie haben Recht. Ich bevorzuge es, die Zahl in der Wertregel der Zeichenfolge zuzuordnen. Und wie könnte ich "zulassen, dass die Wertregel mehrfach angepasst wird"? So funktioniert das obige Beispiel – lchanmann
@mann: Die Wiederholungsoperatoren in Treetop sind '+' und '*' mit ähnlicher Bedeutung wie in 'Regexp'. Siehe die Bearbeitung für Details. –
@Clifford auf Treetop-Entwicklung Google-Gruppe vorschlagen, "!." um EOF anzupassen, also nach dem Ändern der Nummernregel zu "[1-9] [0-9]!." Jetzt kann ich sowohl die Zahl als auch die Saite perfekt abgleichen. Danke Jörg! – lchanmann