2014-08-25 11:12 GMT+02:00 Usman Bhatti <usman.bhatti@gmail.com>:

I understand that context is important when parsing a program for certain parsing related information.

In my case, I am using PetitParser more as a syntax highlighter on the lines of PPTextHighlighter and in that case you dont need much of contextual information. All you need is token positions. Can we envisage, for such usage, a simplistic but more robust parser?

If you're more into that, then a lexer may be enough and a very efficient one can be built with SmaCC.

What you're doing doesn't seems to require a parser: it is just matching

Keyword [^\n] *

isn't it?

Thierry
 
[|string allStyles  text|
string := (PharoFilesOpener default changesFileOrNil contents copyFrom: 1 to: 60000).
text := string asText.
allStyles := {
'Announcement' -> TextColor green. 
'Collections' -> TextColor blue.
'File' -> TextColor blue.
 'Metacello' -> TextColor red.
'Monticello' -> TextColor magenta.
'Morphic' -> TextColor orange.
'Mooose' -> TextColor green.
'FAMIX' -> TextColor green.
'Roassal' -> TextColor green.
}.
allStyles do: [ :assoc | ((assoc key asParser, #newline asParser negate star) matchingRangesIn: string) do: [:aRange | text addAttribute: (assoc value) from: aRange first to: aRange last] ].
text] timeToRun ==> 15 sec