Related articles |
---|
[18 earlier articles] |
Re: Has anyone hand-written a scanner/parser module? armelasselin@hotmail.com (Armel) (2008-11-19) |
Re: Has anyone hand-written a scanner/parser module? bobduff@shell01.TheWorld.com (Robert A Duff) (2008-11-23) |
Re: Has anyone hand-written a scanner/parser module? bobduff@shell01.TheWorld.com (Robert A Duff) (2008-11-23) |
Re: Has anyone hand-written a scanner/parser module? charlesb.cca@mpowercom.net (Charles E. Bortle, Jr.) (2008-11-24) |
Re: Has anyone hand-written a scanner/parser module? charlesb.cca@mpowercom.net (Charles E. Bortle, Jr.) (2008-11-24) |
Re: Has anyone hand-written a scanner/parser module? jmvdveer@xs4all.nl (Marcel van der Veer) (2008-11-25) |
Re: Has anyone hand-written a scanner/parser module? baikaishiuc@gmail.com (xianwei) (2008-11-27) |
Re: Has anyone hand-written a scanner/parser module? d_j_v@mac.com (Dustin Voss) (2008-11-29) |
From: | xianwei <baikaishiuc@gmail.com> |
Newsgroups: | comp.compilers |
Date: | Thu, 27 Nov 2008 17:46:28 -0800 (PST) |
Organization: | Compilers Central |
References: | 08-11-061 |
Keywords: | lex, question |
Posted-Date: | 28 Nov 2008 12:20:27 EST |
On Nov 16, 1:49 am, "tuxisthebirdfo...@gmail.com"
<tuxisthebirdfo...@gmail.com> wrote:
> I know most people anymore use lex/yacc or some derivative of these
> tools to create scanner/parser modules for their compiler projects. I
> was wondering if anyone has developed a scanner or parser that they
> personally hand-wrote?
I write a regular expression engine (base on DFA) to scan the source
code.
the interface like this:
AddMoreType( scanner, L"ID", L"[_a-zA-Z][a-zA-Z0-9_]*" );
AddMoreType( scanner, L"ID.WHILE.discard",
L"while" );
AddMoreType( scanner, L"ID.IF.discard",
L"if" );
AddMoreType( scanner, L"ID.THEN.discard",
L"then" );
AddMoreType( scanner, L"ID.ELSE.discard",
L"else" );
AddMoreType( scanner, L"ID.ENDIF.discard",
L"endif" );
AddMoreType( scanner, L"ID.DO.discard",
L"do" );
AddMoreType( scanner, L"ID.BREAK.discard",
L"break" );
AddMoreType( scanner, L"ID.FOR.discard",
L"for" );
AddMoreType( scanner, L"ID.TO.discard",
L"to" );
AddMoreType( scanner, L"ID.LET.discard",
L"let" );
AddMoreType( scanner, L"ID.IN.discard",
L"in" );
AddMoreType( scanner, L"ID.END.discard",
L"end" );
AddMoreType( scanner, L"ID.TYPE.discard",
L"type" );
AddMoreType( scanner, L"ID.ARRAY.discard",
L"array" );
AddMoreType( scanner, L"ID.OF.discard",
L"of" );
AddMoreType( scanner, L"ID.VAR.discard",
L"var" );
AddMoreType( scanner, L"ID.FUNCTION.discard",
L"function" );
AddMoreType( scanner, L"ID.NIL.discard",
L"nil" );
AddMoreType( scanner, L"STRING", L"\"(\\\\.|[^\"])*
\"" );
AddMoreType( scanner, L"NUM", L"[1-9][0-9]*|
0" );
....
but a little bug is already exists, the next version, i try to fix it.
I spent one month write a LR(1) Grammar Analysis, used to parsing
Tiger language the language defined in Modern Compiler Implementation
in C. about 85 rules. only generate trans-DFA, not support EBNF.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.