Walnut

Alan Knowles alan at akbkhome.com
Thu Jan 3 15:46:18 PST 2008


That little snippet reminded me of another trick:

Dont create Tokens for single character Tokens - eg. -,=,",',..... etc.
Start the Token Enum from 127.

In the case of your Value Type Enum, this should be ok. (may take a bit 
of fudging with the Typedefs on Value.type / Enum creation.)

This enables you to do stuff like the example below:

switch(Value.type) {
     case ':':
     case Token.IF:
     case '=':

Which makes the code considerably more readable. (no remembering what 
Token.LT Token.GT where supposed to be...

Regards
Alan




Alan Knowles wrote:
> Yes, sounds like a good approach.. -
> 
> Might be worth playing with naming the Parse methods around the Grammer 
> as documented in the ECMAScript spec.
> 
> eg. something like:
> 
> // methods? returns 1 if statement found?? or should it just throw an 
> exception???
> bool Statement(bool execute=true)
> {
>     switch(tok) {
>         case '{': // Block:
>             while(Statement());
>             if (tok != '}') throw Error....
>         case TEXT.var: //   VariableStatement:
>             while(VariableStatement());
>             if (tok != ';') throw Error....           
>         case ';': // EmtpyStatement:
>             return 1;
>        
> ExpressionStatement:  -- this may be tricky.. (it uses lookahead?)
>         case TEXT.if:
>             if (tok != '(') throw Error....
>             bool doif = Expression(); // return true|false?
>             if (!Statement(doif)) throw Error...
>             if tok == TEXT.else
>                 if (!Statement(!doif)) throw Error...   
>            
>  IterationStatement:
>  ContinueStatement:
>  BreakStatement:
>  ReturnStatment:
>  WithStatement:
>  LabelledStatement:
>  SwitchStatement:
>  ThrowStatement:
>  TryStatement:
> 
> 
> Regards
> Alan
> 
> 
> Dan wrote:
>> Alan Knowles Wrote:
>>
>>>   .
>>>> Yes, except the object isn't to copy DMDScript without the license,
>>>> the objective is to create an engine that's significantly better.  At
>>>> the moment, I would say roughly half the code is written and I'm
>>>> using 108KB vs DMDScript's 513KB.  The parser is the only remaining
>>>> component before it can (incorrectly) run javascript files.  The rest
>>>> is debugging.
>>>>
>>> so is the idea to run the interpreter inside the parsing engine? or 
>>> are you going to generate opcodes? - It wasn't quite clear?
>>>
>>> Regards
>>> Alan
>>>
>>
>> Would you believe me if I said combinations of both?
>>
>> For now I want to do this:
>> 0) interpret top-level, and compile functions and loops to unoptimized 
>> native for execution (probably default behavior)
>>
>> Later, I'd like it to be able to:
>> 1) tokenize everything and serialize the output.
>> 2) interpret everything on-the-fly, using bytecode for loops, functions
>> 3) compile the whole program to unoptimized native and serialize the 
>> output.
>> 4) run serialized token streams, and serialized compiled scripts.
>>
>> I'm aware that's a tall order.  That's why I'm not scheduling all 
>> those for Walnut 2.0.  They'll come with following minor versions.
>>
>> Regards,
>> Dan


More information about the Digitalmars-d-learn mailing list