N88BASICが簡単に動くインタープリタを目指します。
@@ -30,7 +30,7 @@ | ||
30 | 30 | public string src_str { get; } |
31 | 31 | public bool isEof() |
32 | 32 | { |
33 | - return src_str == ";";//"とりあえずセミコロンで終わる。 | |
33 | + return TokenType == TokenType.EndOfFile; | |
34 | 34 | } |
35 | 35 | public Token(string src_str ,int src_line, int src_col, TokenType t) |
36 | 36 | { |
@@ -43,10 +43,14 @@ | ||
43 | 43 | } |
44 | 44 | TokenType getCharType(int c) |
45 | 45 | { |
46 | + if(c == -1) | |
47 | + { | |
48 | + return EndOfFile; | |
49 | + } | |
46 | 50 | char chr = (char)c; |
47 | - if (chr >= '0' && chr <= '9') | |
51 | + if ('0' <= chr && chr <= '9') | |
48 | 52 | return Digit; |
49 | - if ((chr >= 'A' && chr <= 'Z') || (chr >= 'a' && chr <= 'z')) | |
53 | + if (('A' <= chr && chr <= 'Z') || ('a' <= chr && chr <= 'z')) | |
50 | 54 | return Letter; |
51 | 55 | |
52 | 56 | switch (chr) |
@@ -65,7 +69,7 @@ | ||
65 | 69 | case ',': return Comma; |
66 | 70 | case '.': return Period; |
67 | 71 | case '"': return DoubleQuote; |
68 | - case ';': return EndOfFile;//test用 Semicolon; | |
72 | + //test用 Semicolon; | |
69 | 73 | case '\n': return EndOfLine; |
70 | 74 | case ':': return Colon; |
71 | 75 | default: |
@@ -82,6 +86,7 @@ | ||
82 | 86 | |
83 | 87 | add_char_to_src_str(curChar); |
84 | 88 | curChar = Console.Read(); |
89 | + | |
85 | 90 | if (curChar == '\n') |
86 | 91 | { |
87 | 92 |
@@ -120,13 +120,13 @@ | ||
120 | 120 | { |
121 | 121 | next(); |
122 | 122 | Console.Write(","); |
123 | - expression();//color | |
123 | + if(nextToken.TokenType != TokenType.Comma) { | |
124 | + expression();//color | |
125 | + } | |
124 | 126 | } |
125 | 127 | else |
126 | 128 | { |
127 | - next(); | |
128 | - Console.WriteLine(")"); | |
129 | - return; | |
129 | + goto line_end; | |
130 | 130 | } |
131 | 131 | if (nextToken.TokenType == TokenType.Comma) |
132 | 132 | { |
@@ -135,9 +135,7 @@ | ||
135 | 135 | } |
136 | 136 | else |
137 | 137 | { |
138 | - next(); | |
139 | - Console.WriteLine(")"); | |
140 | - return; | |
138 | + goto line_end; | |
141 | 139 | } |
142 | 140 | if (nextToken.TokenType == TokenType.identifier |
143 | 141 | && (nextToken.src_str == "B" || nextToken.src_str == "BF")) |
@@ -149,8 +147,10 @@ | ||
149 | 147 | if (nextToken.TokenType == TokenType.Comma) |
150 | 148 | { |
151 | 149 | Console.Write(","); |
150 | + next(); | |
152 | 151 | expression();//color2 |
153 | 152 | } |
153 | + line_end: | |
154 | 154 | Console.WriteLine(")"); |
155 | 155 | next(); |
156 | 156 | } |