diff -r 132d7898a2a1 -r 666372dbe307 compiler/PPCCompilationOptions.st --- a/compiler/PPCCompilationOptions.st Wed Aug 26 23:01:00 2015 +0100 +++ b/compiler/PPCCompilationOptions.st Wed Aug 26 23:34:48 2015 +0100 @@ -21,7 +21,98 @@ yourself ! ! -!PPCCompilationOptions methodsFor:'accessing'! +!PPCCompilationOptions methodsFor:'initialization'! + +initialize + super initialize. + options := IdentityDictionary new +! ! + +!PPCCompilationOptions methodsFor:'options'! + +mode + ^ self at: #mode ifAbsent: #JIT + + "Created: / 26-08-2015 / 23:18:33 / Jan Vrany " +! + +mode: mode + "Set the compilation mode - valid values are #JIT or #AOT. + + #JIT mode put less constraints on the original pure PetitParser + parser (such as action blocks are not required to be purely functional, + support mixing of compiled parsing code with custom PPParsers and so on). + However, JIT-compiled parser class SHOULD NOT be commited into the + repository - it won't work when loaded back. + + #AOT mode allows for parser to be pre-compiled and generated code + to be commited to repository. Thus, the deployed application don't need + to contain full PetitCompiler. However, this is at cost of more contraints + being put on the original Petit Parser. In other words, not all PetitParser + parser may be compiled in AOT mode. + WARNING: #AOT mode is not yet fully supported, do not use!! + " + + (#(JIT AOT) includes: mode) ifFalse:[ + PPCCompilationError new signal: 'Invalid mode: option value - must be either #JIT or #AOT'. + ]. + mode == #AOT ifTrue:[ + PPCCompilationWarning new signal: '#AOT mode not yet supported'. + ]. + self at: #mode put: mode + + "Created: / 26-08-2015 / 23:07:15 / Jan Vrany " +! + +parserName + ^ self at: #parserName ifAbsent: #PPGeneratedParser + + "Modified (format): / 26-08-2015 / 23:04:33 / Jan Vrany " +! + +parserName: aSymbol + "Sets the name of the generated parser class. + Defaults to #PPGeneratedParser." + + self set: #parserName to: aSymbol. + + "Modified (comment): / 26-08-2015 / 23:05:44 / Jan Vrany " +! + +scannerName + ^ self at: #scannerName ifAbsent: #PPGeneratedScanner +! + +scannerName: value + "Sets the name of the generated parser class. + Defaults to #PPGeneratedScanner." + + self set: #scannerName to: value. + + "Modified (comment): / 26-08-2015 / 23:06:27 / Jan Vrany " +! + +tokenize + ^ self at: #tokenize ifAbsent: true +! + +tokenize: aBoolean + "Build tokenizing parser, i.e., build scanner that tokenizes the input and then + parser consuming tokens produced by scanner. + + Tokenizing parser more resemble hand-written top-down parser and + makes hand-tuning of the parser / scanner easier. However, not all + PetitParsers may be tokenized. + + Default value is true. If the compilation fails, try to set it to + false + " + self set: #tokenize to: aBoolean. + + "Modified (comment): / 26-08-2015 / 23:24:47 / Jan Vrany " +! ! + +!PPCCompilationOptions methodsFor:'options - undocumented (do not use)'! cacheFirstFollow ^ self at: #cacheFirstFollow ifAbsent: true @@ -31,15 +122,6 @@ self set: #cacheFirstFollow to: value. ! -codeGenerator - self error: 'deprecated?'. - ^ self at: #codeGenerator ifAbsent: PPCCodeGenerator -! - -codeGenerator: value - self set: #codeGenerator to: value. -! - debug ^ self at: #debug ifAbsent: true ! @@ -88,14 +170,6 @@ self set: #merge to: value. ! -parserName - ^ self at: #parserName ifAbsent: #PPGeneratedParser -! - -parserName: value - self set: #parserName to: value. -! - parserSuperclass ^ self at: #parserSuperclass ifAbsent: PPTokenizingCompiledParser ! @@ -120,14 +194,6 @@ self set: #recognizingComponents to: value. ! -scannerName - ^ self at: #scannerName ifAbsent: #PPGeneratedScanner -! - -scannerName: value - self set: #scannerName to: value. -! - scannerSuperclass ^ self at: #scannerSuperclass ifAbsent: PPCDistinctScanner ! @@ -142,21 +208,6 @@ specialize: value self set: #specialize to: value. -! - -tokenize - ^ self at: #tokenize ifAbsent: true -! - -tokenize: value - self set: #tokenize to: value. -! ! - -!PPCCompilationOptions methodsFor:'initialization'! - -initialize - super initialize. - options := IdentityDictionary new ! ! !PPCCompilationOptions methodsFor:'private'!