• R/O
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

N88BASICが簡単に動くインタープリタを目指します。


Commit MetaInfo

Revision14 (tree)
Time2018-09-23 11:50:44
Authorbellyoshi

Log Message

Change Summary

Incremental Difference

--- trunk/csmock/WindowsFormsApp1/getToken/Program.cs (nonexistent)
+++ trunk/csmock/WindowsFormsApp1/getToken/Program.cs (revision 14)
@@ -0,0 +1,21 @@
1+using System;
2+using System.Collections.Generic;
3+using System.Linq;
4+using System.Text;
5+using System.Threading.Tasks;
6+
7+namespace getToken
8+{
9+ class Program
10+ {
11+ static void Main(string[] args)
12+ {
13+ var tg = new TokenGetter();
14+ var token = tg.NextToken();
15+ while (!token.isEof()) {
16+ Console.WriteLine(token.ToString());
17+ token = tg.NextToken();
18+ }
19+ }
20+ }
21+}
--- trunk/csmock/WindowsFormsApp1/getToken/Properties/AssemblyInfo.cs (nonexistent)
+++ trunk/csmock/WindowsFormsApp1/getToken/Properties/AssemblyInfo.cs (revision 14)
@@ -0,0 +1,36 @@
1+using System.Reflection;
2+using System.Runtime.CompilerServices;
3+using System.Runtime.InteropServices;
4+
5+// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
6+// アセンブリに関連付けられている情報を変更するには、
7+// これらの属性値を変更してください。
8+[assembly: AssemblyTitle("getToken")]
9+[assembly: AssemblyDescription("")]
10+[assembly: AssemblyConfiguration("")]
11+[assembly: AssemblyCompany("")]
12+[assembly: AssemblyProduct("getToken")]
13+[assembly: AssemblyCopyright("Copyright © 2018")]
14+[assembly: AssemblyTrademark("")]
15+[assembly: AssemblyCulture("")]
16+
17+// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから
18+// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、
19+// その型の ComVisible 属性を true に設定してください。
20+[assembly: ComVisible(false)]
21+
22+// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
23+[assembly: Guid("0e8234cf-c593-4b60-8f25-c79eb143c837")]
24+
25+// アセンブリのバージョン情報は次の 4 つの値で構成されています:
26+//
27+// メジャー バージョン
28+// マイナー バージョン
29+// ビルド番号
30+// Revision
31+//
32+// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます
33+// 既定値にすることができます:
34+// [assembly: AssemblyVersion("1.0.*")]
35+[assembly: AssemblyVersion("1.0.0.0")]
36+[assembly: AssemblyFileVersion("1.0.0.0")]
--- trunk/csmock/WindowsFormsApp1/getToken/Token.cs (nonexistent)
+++ trunk/csmock/WindowsFormsApp1/getToken/Token.cs (revision 14)
@@ -0,0 +1,45 @@
1+using System;
2+using System.Collections.Generic;
3+using System.Linq;
4+using System.Text;
5+using System.Threading.Tasks;
6+
7+namespace getToken
8+{
9+ enum TokenType {
10+ int_value,double_value, str_value
11+ ,ab_if,ab_else,ab_end_if,ab_then,
12+ ab_for,ab_to,ab_step,ab_next,
13+ identifier,
14+ Plus, Minus, Mult, Div,Equal,// +-*/=
15+ Lparen, Rparen,//()
16+ LBrace, RBrace,//{}
17+ Comma, Period,//,.
18+ Lss, Gtr,// < >
19+ Letter, Digit, Colon, Others,
20+ EndOfFile
21+ }
22+ class Token
23+ {
24+ TokenType tokenType;
25+ string value_cs_str;
26+ int src_line;
27+ int src_col;
28+ string src_str;
29+ public bool isEof()
30+ {
31+ return src_str == ";";//"とりあえずセミコロンで終わる。
32+ }
33+ public Token(string src_str ,int src_line, int src_col, TokenType t)
34+ {
35+ this.src_col = src_col;
36+ this.src_line = src_line;
37+ this.src_str = src_str;
38+ this.tokenType = t;
39+ }
40+ public override string ToString()
41+ {
42+ return $"{tokenType}:line={src_line}:col={src_col}:{src_str}";
43+ }
44+ }
45+}
--- trunk/csmock/WindowsFormsApp1/getToken/TokenGetter.cs (nonexistent)
+++ trunk/csmock/WindowsFormsApp1/getToken/TokenGetter.cs (revision 14)
@@ -0,0 +1,81 @@
1+using System;
2+using System.Collections.Generic;
3+using System.Linq;
4+using System.Text;
5+using System.Threading.Tasks;
6+using static getToken.TokenType;
7+
8+namespace getToken
9+{
10+ class TokenGetter
11+ {
12+ private int src_line;
13+ private int src_col;
14+
15+ TokenType getCharType(char chr)
16+ {
17+ if (chr >= '0' && chr <= '9')
18+ return Digit;
19+ if ((chr >= 'A' && chr <= 'Z') || (chr >= 'a' && chr <= 'z'))
20+ return Letter;
21+
22+ switch (chr)
23+ {
24+ case '{': return LBrace;
25+ case '}': return RBrace;
26+ case '+': return Plus;
27+ case '-': return Minus;
28+ case '*': return Mult;
29+ case '/': return Div;
30+ case '(': return Lparen;
31+ case ')': return Rparen;
32+ case '=': return Equal;
33+ case '<': return Lss;
34+ case '>': return Gtr;
35+ case ',': return Comma;
36+ case '.': return Period;
37+// case ';': return Semicolon;
38+ case ':': return Colon;
39+ default:
40+ break;
41+ }
42+ return Others;
43+
44+
45+
46+ }
47+ int NextChar()
48+ {
49+ var c = Console.Read();
50+ if (c == '\n')
51+ {
52+ src_line++;
53+ src_col = 0;
54+ }
55+ else
56+ {
57+ src_col++;
58+ }
59+ return c;
60+ }
61+ public Token NextToken()
62+ {
63+ int c = NextChar();
64+ while (true)
65+ {
66+ if (c == ' ' || c == '\t')
67+ {
68+ ;
69+ }
70+ else
71+ {
72+ break;
73+ }
74+ c = NextChar();
75+
76+ }
77+ var t = getCharType((char)c);
78+ return new Token(c.ToString(),src_line,src_col, t);
79+ }
80+ }
81+}