-
Notifications
You must be signed in to change notification settings - Fork 0
Spike
Paula-Kli edited this page May 14, 2020
·
11 revisions
defaultStartRule: nicht auf #ArrayLiteral setzen
sehr tiefen Baum
dürfen nicht zu tief gehen, da jede einzelne Ziffer und jeder einzelne Buchstabe einen einzelnen Knoten hat
smalltalk := OhmGrammar new: OhmSmalltalk serializedGrammar.
match := (smalltalk match: '#(1+2)').
matchState := match state bindingsStack
--> wir müssen hier den ArrayLiteral '#' zuerst nehmen, da das die DefaultStartingRule
ist
--> benötigen gar keine neue Instanz dieser Grammatik - siehe Patricks Introduction
es reicht sogar:'match cst'
smalltalk := OhmGrammar new: OhmSmalltalk serializedGrammar.
smalltalk defaultStartRuleName: #Expression.
match := (smalltalk match: '5').
tree := match cst
Um sich diesen cst ausgeben zu lassen:
printCST: aString
| smalltalk match |
smalltalk := OhmGrammar new: OhmSmalltalk serializedGrammar.
smalltalk defaultStartRuleName: #Expression.
match := smalltalk match: aString.
match failed
ifTrue: [
Transcript show: match failure
] ifFalse: [
OPPrinter print: match cst withIndent: ''
]
print: aCST withIndent: aString
aCST isTerminalNode ifFalse: [
Transcript show: aString.
Transcript show: aCST ruleName; cr.
aCST children do: [ :child |
OPPrinter print: child withIndent: ' ' , aString
]
]
Tests erben von Testcase
SmalltalkCI hat eine Datei zur Konfiguration