Tuesday, April 3, 2012

April 3

OPR = operation = [+-*/]
OP:= (

CP := )

P:= Expression \n
FuncDescription:= D WT FuncName EQ FuncExpression NL
FN:=name() | name(  FuncParameters )
FP := AT name | AT name CO FP
VD:= "S name = E " NL
v:= S name
E:=N | v | OP E CP | FC | E OPR E
FV := AT name (functionVariable)

FC:= FN op cp | name op FuncCallParams cp
FCP := E | E CO FCP
FE = E | FV


WT:= empty space like [\t \r].+  NOT NEW


Number := [0..9].+  (one or more numeric characters) | [0..9].+ '.' [0..9].+
C:= [a...zA..Z].  (one character)
name:= c[a..zA..Z0..9]+
D:= def

================================
isChar(char)
AT := @
S := #

class Token
OPR
CP
OP
V
FV
AT
S
Name
N
CO
EQ

char in[]
int inLen
int pos = 0
Token tokenStream[]

while( !done && pos < inLen)
   skipWt( in, inlen, pos )   <------ move past white space in front of token (does not delete white space)

   if( isChar ( in[pos] ) )
        lexNameorDef(in, inlen, pos) -> tokenStream
   elsif(  in[pos] == '#' )
        tokenStream.add( NewToken (Sharp) );
   elsif( in[pos]  == '@' )
        add(newToken (AT) )
                                   OP
                                   CP
                                   COM
                                   EQ
                                   EQEQ
   eif( in[pos] == '+' || in[pos] == '-' ||
        add( newToken (OPR, in[pos] ) )
   eif( isNum( in[pos] ) )
        lexNumber( in inlen pos ) -> tokenStream
   eif( in[pos] == '\n' ) 
        add( new Token (NL) )


=====================
lexNameorDef( in, inlen, pos )
   //check for def
   if( pos + 2 < inlen )
      in[pos] == 'd'    &&    in[ pos + 1] == 'e'   && in[ pos+2 ] == 'f'   &&  in[pos+3] == WHITESPACE
   pos  = pos + 3
   return newToken(D)

   //name
   string name
   while( isAlphaNum( in[pos] )  )
         name.append( in[pos] )
         ++ pos;
         return newToken(NAME, name)
   --pos;                               ---> because must stop before next token



state stacks
   top
   def
   expr
   paren
   funcCall
   FuncCallParams
   Add
   Sub
   Mul
   Div

No comments:

Post a Comment