--- a/SmaCC__SmaCCParserGenerator.st Wed Aug 12 09:23:35 2009 +0000
+++ b/SmaCC__SmaCCParserGenerator.st Sun Aug 16 17:09:03 2009 +0000
@@ -910,6 +910,14 @@
itemValue: compileLR1
translateLabel: true
)
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ label: 'Compile Highlighter'
+ itemValue: compileHighlighter
+ translateLabel: true
+ )
)
nil
nil
@@ -936,12 +944,28 @@
nil
nil
)
-
- "Modified: / 12-05-2007 / 21:08:14 / janfrog"
! !
!SmaCCParserGenerator methodsFor:'accessing'!
+highlighterClass
+
+ ^RBClass new
+ name: self highlighterClassName asSymbol;
+ model: (RBNamespace new
+ name: 'Compile Highlighter';
+ yourself);
+ yourself
+
+ "Created: / 14-08-2009 / 20:41:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+highlighterClassName
+ ^ self highlighterClassNameHolder value
+
+ "Created: / 14-08-2009 / 20:27:28 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
loadScannerAndParserFromFile
^self loadScannerAndParserFromFileHolder value
@@ -1111,6 +1135,48 @@
"Modified: / 11-05-2007 / 12:24:42 / janfrog"
!
+compileHighlighter
+ |grammar class changes oldIgnoreCase oldCharacterSize scannerCompiler |
+
+ self acceptDefinitions.
+ (self highlighterClassName isEmpty or:[ self parserClassName isEmpty ]) ifTrue:[
+ ^ self warn:'Syntax highlighter and/or parser class name not specified'
+ ].
+ self
+ withWaitCursorDo:[
+ self verifySyntax ifFalse:[
+ ^ self
+ ].
+ oldIgnoreCase := SmaCCGrammar ignoreCase.
+ oldCharacterSize := SmaCCGrammar maximumCharacterValue.
+ [
+ SmaCCGrammar
+ ignoreCase:self ignoreCaseHolder value;
+ maximumCharacterValue:(self allowUnicodeHolder value
+ ifTrue:[ (2 raisedTo:16) - 1 ]
+ ifFalse:[ 255 ]).
+ grammar := SmaCCGrammar new.
+ scannerCompiler :=
+ SmaCCScannerCompiler new
+ scannerDefinitionString: self scannerDefinition;
+ scannerClass: (class := self highlighterClass);
+ grammar: grammar;
+ parseTokens.
+ (SmaCCGrammarParser on: (ReadStream on: self parserDefinition))
+ grammar: grammar;
+ parse.
+ scannerCompiler compileScanner.
+ changes := class model changes.
+ RefactoryChangeManager instance performChange: changes.
+ (Smalltalk at: class name) initializeKeywordMap.
+
+ ] on: Error do: [:ex|ex pass]
+ ].
+
+ "Modified: / 14-02-2008 / 13:30:27 / janfrog"
+ "Created: / 14-08-2009 / 20:29:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
compileLALR1
self compile: #LALR1
@@ -1137,6 +1203,17 @@
"Modified: / 11-08-2009 / 17:50:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
+findHighlighterClass
+ | class |
+ class := self
+ choose: 'What class do you want to use?'
+ from: (SmaCCScanner allSubclasses asSortedCollection: [:a :b | a name < b name]).
+ class isNil ifTrue: [^self].
+ self highlighterClassNameHolder value: class fullName.
+
+ "Created: / 14-08-2009 / 20:25:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
findParserClass
| class |
class := self choose: 'What class do you want to use?'