annotate lex.rhope @ 189:d0e3a13c1bd9 default tip

Remove old calculator example
author Mike Pavone <pavone@retrodev.com>
date Fri, 07 Oct 2011 00:24:04 -0700
parents 386f4a874821
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 Blueprint Token
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 Type
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 Raw Text
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 Text
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 Token[type,raw,text:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
11 out <- [[[Build[Token()]]Type <<[type]]Raw Text <<[raw]]Text <<[text]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 _Type Match[val, test type, type:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 If[[test type]=[type]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 out <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 out <- Val[val]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
24 As List[val:out]
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
25 {
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
26 [(List(),List Leaf())]Find[=[?, Blueprint Of[val]]]
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
27 {
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
28 out <- val
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
29 }{
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
30 out <- [()]Append[val]
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
31 }
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
32 }
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
33
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 Type Match@Token[token,type:match,nomatch]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
36 match,nomatch <- If[Fold[_Type Match[?,?, [token]Type >>], No, As List[type]]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 String Literal[string, raw string, escapes, text, simple tokens, token list:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 first,rest <- [text]Slice[1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 If[[first] = ["\""]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44 out <- _Lex[rest, [first]Slice[0], simple tokens, [token list]Append[Token["String Literal", raw string, string]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 next raw <- [raw string]Append[first]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 If[[first] = ["\\"]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 second,next text <- [rest]Slice[1]
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
50 char <- [escapes]Index[String[second]] {}
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 char <- Val[second]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 next string <- [string]Append[char]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 next string <- [string]Append[first]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 next text <- Val[rest]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 out <- String Literal[next string, next raw, escapes, next text, simple tokens, token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 Line Comment[start comment, text, simple tokens, token list:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
65 comment,,next text <- [text]Partition["\n"] {} {} {}
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 next text <- ""
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
68 comment <- Val[text]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70 out <- _Lex[next text, [next text]Slice[0], simple tokens, [token list]Append[Token["Line Comment", [start comment]Append[comment], comment]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 Block Comment[comment,raw comment, depth, text, simple tokens, token list:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
76 Print[["Block Comment: Depth="]Append[String[depth]]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77 If[[depth] > [0]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
79 chunk, delim, next text <- [text]Partition[("/*","*/")] {} {} {}
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 next text <- ""
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 delim <- ""
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
83 chunk <- Val[text]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85 If[[delim] = ["/*"]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 next depth <- [depth] + [1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 next depth <- [depth] - [1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 If[[next depth] = [0]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 next comment <- [comment]Append[chunk]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 next comment <- [[comment]Append[chunk]]Append[delim]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 out <- Block Comment[next comment, [[raw comment]Append[chunk]]Append[delim], next depth, next text, simple tokens, token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 out <- _Lex[text, [raw comment]Slice[0], simple tokens, [token list]Append[Token["Block Comment", raw comment, comment]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
103 Numeric Literal[literal, text, simple tokens, token list:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
105 first,rest <- [text]Slice[1]
134
386f4a874821 More work on new parser
Mike Pavone <pavone@retrodev.com>
parents: 132
diff changeset
106 If[[first] In ["01234567890.xui"]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108 out <- Numeric Literal[[literal]Append[first], rest, simple tokens, token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 out <- _Lex[text, [first]Slice[0], simple tokens, [token list]Append[Token["Numeric Literal", literal, literal]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 Add Token[token, text, simple tokens, token list:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 out <- _Lex[text, [text]Slice[0], simple tokens, [token list]Append[token]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 _Lex[text, symbol, simple tokens,token list:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 If[[[text]Length] > [0]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 first,rest <- [text]Slice[1]
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
124 [simple tokens]Index[String[first]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
126 token worker <- Val[Add Token[Token[~, first, ""], rest, ?]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 If[[first] = ["\""]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
130 escapes <- [[[Dictionary[]]Set["n","\n"]]Set["r","\r"]]Set["t","\t"]
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
131 token worker <- Val[String Literal[[first]Slice[0], first, escapes, rest, ?]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 //out <- String Literal["", first, rest, simple tokens, token list, escapes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
133 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 second,second rest <- [rest]Slice[1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
135 If[[[first] = ["<"]] And [[second]=["-"]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
136 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 [first]Append[second]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
139 token worker <- Val[Add Token[Token["Assignment", ~, ~], second rest, ?]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 If[[[first] = ["/"]] And [[second] = ["*"]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
145 token worker <- Val[Block Comment[[first]Slice[0], [first]Append[second], 1, second rest, ?]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 //out <- Block Comment[next text, simple tokens, token list, 1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 If[[[first] = ["/"]] And [[second] = ["/"]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
150 token worker <- Val[Line Comment[[first]Append[second], second rest, ?]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 //out <- Line Comment["", [first]Append[second], next text, simple tokens, token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 If[[[first]In["0123456789"]] Or [[[first] = ["-"]] And [[second]In["0123456789"]]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 {
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
155 token worker <- Val[Numeric Literal[first, rest, ?]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 //out <- Numeric Literal[text, simple tokens, token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 out <- _Lex[rest, [symbol]Append[first], simple tokens, token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 Val[token worker]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 trimmed <- Trim[symbol, " \t\r\n"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 If[[trimmed] = [""]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171 next list <- Val[token list]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172 }{
132
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
173 If[[trimmed]=["?"]]
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
174 {
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
175 token type <- "Arg Placeholder"
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
176 }{
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
177 If[[trimmed]=["~"]]
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
178 {
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
179 token type <- "Block Reference"
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
180 }{
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
181 If[[trimmed]Ends With[">>"]]
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
182 {
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
183 next list <- [token list]Append[Token["Field Get", trimmed, Trim[[trimmed]Slice[ [[trimmed]Length]-[2] ], " \t\r\n"] ]]
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
184 }{
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
185 If[[trimmed]Ends With["<<"]]
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
186 {
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
187 next list <- [token list]Append[Token["Field Set", trimmed, Trim[[trimmed]Slice[ [[trimmed]Length]-[2] ], " \t\r\n"] ]]
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
188 }{
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
189 token type <- "Symbol"
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
190 }
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
191
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
192 }
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
193 }
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
194 }
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
195 next list <- [token list]Append[Token[token type, trimmed, trimmed]]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
196 }
131
0a4682be2db2 Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
197 out <- [token worker]Call[simple tokens, next list]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
198 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
199 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
200 out <- token list
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
201 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
202 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
203
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 Lex[text:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205 {
134
386f4a874821 More work on new parser
Mike Pavone <pavone@retrodev.com>
parents: 132
diff changeset
206 simple tokens <- [[[[[[[[[[[Dictionary[]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
207 ]Set["{", "Block Begin"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
208 ]Set["}", "Block End"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
209 ]Set["(", "List Begin"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
210 ]Set[")", "List End"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
211 ]Set["[", "Args Begin"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
212 ]Set["]", "Args End"]
134
386f4a874821 More work on new parser
Mike Pavone <pavone@retrodev.com>
parents: 132
diff changeset
213 ]Set[".", "Call Separator"]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
214 ]Set[",", "List Separator"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
215 ]Set[":", "Name Separator"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216 ]Set["@", "Method Separator"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
217 ]Set["\n", "Newline"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218 out <- _Lex[text, [text]Slice[0], simple tokens, ()]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
219 }
132
1f238280047f Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents: 131
diff changeset
220