Mercurial > projects > dil
view trunk/src/main.d @ 28:3a9daccf7d96
- Added table for identifiers to Lexer.
- Added keywords table.
- Added keywords to TOK.
author | aziz |
---|---|
date | Sun, 24 Jun 2007 17:19:03 +0000 |
parents | b05fff8e2ce4 |
children | 426767b94635 |
line wrap: on
line source
/++ Author: Aziz Köksal License: GPL2 +/ module dparser; import Lexer; import Token; import std.stdio; import std.file; char[] xmlescape(char[] text) { char[] result; foreach(c; text) switch(c) { case '<': result ~= "<"; break; case '>': result ~= ">"; break; case '&': result ~= "&"; break; default: result ~= c; } return result; } void main(char[][] args) { auto srctext = cast(char[]) std.file.read(args[1]); auto lx = new Lexer(srctext); auto tokens = lx.getTokens(); char* end = lx.text.ptr; writef(`<?xml version="1.0"?> <?xml-stylesheet href="format.css" type="text/css"?> <sourcetext>`); foreach(ref token; tokens) { if (end != token.start) writef("%s", xmlescape(end[0 .. token.start - end])); string span = xmlescape(token.span); switch(token.type) { case TOK.Identifier: writef("<i>%s</i>", span); break; case TOK.Comment: writef("<c>%s</c>", span); break; case TOK.String: writef("<sl>%s</sl>", span); break; case TOK.Character: writef("<cl>%s</cl>", span); break; case TOK.DivisionAssign: writef("<op>%s</op>", span); break; case TOK.Number: writef("<n>%s</n>", span); break; case TOK.LParen, TOK.RParen, TOK.LBracket, TOK.RBracket, TOK.LBrace, TOK.RBrace: writef("<br>%s</br>", span); break; case TOK.EOF: break; default: if (token.isKeyword()) writef("<k>%s</k>", span); else writef("%s", span); } end = token.end; } writef("\n</sourcetext>"); }