Mercurial > projects > dil
view trunk/src/main.d @ 21:c785c122e4e6
- Added code for parsing Colon, Semicolon, Question, Comma and Dollar.
author | aziz |
---|---|
date | Sat, 23 Jun 2007 22:43:02 +0000 |
parents | d6adfbd7c513 |
children | b05fff8e2ce4 |
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])); char[] span = xmlescape(token.start[0 .. token.end-token.start]); 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; default: writef("%s", span); } end = token.end; } writef("\n</sourcetext>"); }