www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Re: Pegged: Syntax Highlighting

On 3/11/12, Philippe Sigaud <philippe.sigaud gmail.com> wrote:
 Parsing Expression Grammar (PEG) generator in D.
Slightly off-topic and not directly aimed at Philippe, but I'm curious, how would one use a parser like Pegged for syntax highlighting? I know my way around painting and using style bits for coloring text (e.g. I have a D port of Neatpad I play around with), but I'm not sure how I would combine this with the parser. Maybe someone more knowledgeable (Rainer Schuetze from VisualD perhaps? :) ) could chime in. For example, I can set style bits for a certain range of text, e.g. the style bits for this text: x( int var); might be (where S designates Style): S.Text, S.Blank, S.OpenParen, S.Type, S.Type, S.Type, S.Blank... Well you get the picture. To set those style bits I do need to run a parser on the input string. So let's say Peg gives me back this structure (I'm just guessing what the structure looks like): ParseTree("Function", ...) .children -> ParseTree("BuiltInType", ...) .children -> ParseTree("ParamDecl") This is all good so far, I can extract the needed info for the style bits, but what I don't have are the offsets into the string at which a ParseTree starts and ends. So I wouldn't know at which offset to put a set of style bits. I can't tell which parts of Pegged are the API and which are internal functions, but maybe I could use some specific functions instead of just calling .parse()., and then walk through the string and set each style bit. Anyway I think this is an interesting topic worth talking about. :)
Mar 13 2012