Skip to content
Paula-Kli edited this page May 14, 2020 · 11 revisions

Spike Dokumentation

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

Clone this wiki locally