Related articles |
---|
Syntax Highlighting and Lexical Analysis Dominic@tootedom.freeserve.co.uk (Dominic Tootell) (1999-09-11) |
Re: Syntax Highlighting and Lexical Analysis jacob.navia@wanadoo.fr (jacob.navia) (1999-09-16) |
Re: Syntax Highlighting and Lexical Analysis webid@asi.fr (Armel) (1999-09-16) |
Re: Syntax Highlighting and Lexical Analysis Marko.Makela@HUT.FI (Marko =?ISO-8859-1?Q?M=E4kel=E4?=) (1999-09-20) |
Re: Syntax Highlighting and Lexical Analysis maratb@CS.Berkeley.EDU (Marat Boshernitsan) (1999-09-20) |
Re: Syntax Highlighting and Lexical Analysis qjackson@wave.home.com (Quinn Tyler Jackson) (1999-10-04) |
From: | Marat Boshernitsan <maratb@CS.Berkeley.EDU> |
Newsgroups: | comp.compilers |
Date: | 20 Sep 1999 11:58:16 -0400 |
Organization: | University of California at Berkeley |
References: | 99-09-041 |
Keywords: | tools, lex |
"Dominic Tootell" <Dominic@tootedom.freeserve.co.uk> writes:
> I'm trying to building my own editor.
>
> I have never before done any lexical analysis type work, and I was wondering
> if anyone could point me in the correct direction. I know that you read the
> file in and produce a parse tree build on tokens (using a variation of the
> red black tree). The problem is how to I do about parsing the file,
> especially when commands can span lines, eg curly brackets and the like.
>
> If anyone can help me, or provide me with any information I will be most
> grateful. The kind of syntax highlighting I am looking for is the type that
> is done in emacs for C code or Java. I know that emacs uses an internal
> Lisp engine to read the code depending on a .el configuration file, but the
> thought of having to program a Lisp engine is scarry, and I have never
> bofore had any interaction with lisp.
The "really right" (and really general) way to do this is to use an
incremental lexer and relex at each keystroke. This lets you maintain
precise lexical information at all times and handle all possible cases
without having to craft complicated regexes[1].
One way to build an incremental lexer by simply driving a (possibly flex
generated) batch lexer is described in one of the chapters in Tim
Wagner's thesis:
Tim A. Wagner. Practical Algorithms for Incremental Software Development
Environments Ph.D. Dissertation, Report No. UCB//CSD-97-946
http://sunsite.berkeley.edu:80/Dienst/UI/2.0/Describe/ncstrl.ucb/CSD-97-946
(the thesis also talks about how to build an incremental LALR(1) and GLR
parser)
This will handle any anal language you can ever describe with something
like flex (and it makes it easy to support many languages in one
editor); however if your language's lexical structure is simple, then
this is probably an overkill and regexes is the way to go.
HTH,
Marat.
Footnotes:
[1] You can imagine that correctly highlighting something
like this would be rather difficult with regexes:
int
foo(
int x,
/* a funky comment
int y */
);
Return to the
comp.compilers page.
Search the
comp.compilers archives again.