質問編集履歴
15
困ったことの追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -89,6 +89,9 @@
|
|
89
89
|
`JSON.JSON.stringify("{true}"); // '"{true}"'`
|
90
90
|
のような形で得てしまっているのですが,ほしいのは`'{true}'`なのでずれが生じてしまっています.
|
91
91
|
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
|
92
|
+
|
93
|
+
#### 5/4
|
94
|
+
追記部分の`JSONparse`の出力結果で,先頭部分に`Token.Token.type`に`LOOP`があることを想定してJSを書いているのですが,ログを見てみると最初から`INT`が見えていて,それが原因でif文に入っていないのでは,でもなぜ無くなっているのか分からない,というのが現状です.
|
92
95
|
|
93
96
|
### 該当のソースコード
|
94
97
|
下部の追記にリポジトリとして関係するファイルはすべて置かせていただいております.
|
14
画像追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -177,6 +177,8 @@
|
|
177
177
|
```
|
178
178
|
{"Statements":[{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Expression":{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Condition":{"Token":{"Token":{"type":"INT","literal":"10"}},"Value":10},"Consequence":{"Token":{"Token":{"type":"LBRACE","literal":"{"}},"Statements":[{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"60"}},"Value":60},{"Token":{"Token":{"type":"FLOAT","literal":"0.1"}},"Value":0.1}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}}]}}}]}
|
179
179
|
```
|
180
|
+
`console.log(JSONparse);`の結果は次のようになっています.
|
181
|
+

|
180
182
|
|
181
183
|
#### リポジトリ
|
182
184
|
コードの細かい部分は以下のリポジトリとして置かせていただきます.
|
13
不要コードの削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -92,47 +92,8 @@
|
|
92
92
|
|
93
93
|
### 該当のソースコード
|
94
94
|
下部の追記にリポジトリとして関係するファイルはすべて置かせていただいております.
|
95
|
-
```JavaScript
|
96
|
-
var xml = "";
|
97
|
-
function makeAST(){
|
98
|
-
|
95
|
+
ここに記載していたコードは,追記にて修正を行ったので,質問文の簡潔化を図るために省略しております.
|
99
|
-
const l = newLexer(scriptdata);
|
100
|
-
const p = newParser(l);
|
101
|
-
const program = p.parseProgram();
|
102
|
-
checkParserErrors(p);
|
103
96
|
|
104
|
-
const JSONobj = JSON.stringify(program)
|
105
|
-
xml = makeXML(JSONobj);
|
106
|
-
return;
|
107
|
-
}
|
108
|
-
|
109
|
-
// Function to convert JSON AST to XML
|
110
|
-
function makeXML(ast) {
|
111
|
-
let xml = '';
|
112
|
-
xml += '<xml xmlns="http://www.w3.org/1999/xhtml">';
|
113
|
-
xml += traverseAST(ast);
|
114
|
-
xml += '</xml>';
|
115
|
-
return xml;
|
116
|
-
}
|
117
|
-
|
118
|
-
// Function to traverse the AST and generate XML
|
119
|
-
function traverseAST(node) {
|
120
|
-
let xml = '';
|
121
|
-
// Handle different types of nodes in your AST
|
122
|
-
if (node.Token && node.Token.type === 'LOOP') {
|
123
|
-
xml += '<block type="controls_repeat_ext" id="T,:lx`qH6`%re*cN8lOx" x="-5" y="23">';
|
124
|
-
xml += '<value name="TIMES">';
|
125
|
-
xml += `<shadow type="math_number" id="GamoPT;mPC@7[FE#B4W!"><field name="NUM">${node.Expression.Condition.Value}</field></shadow>`;
|
126
|
-
xml += '</value>';
|
127
|
-
xml += '<statement name="DO">';
|
128
|
-
xml += traverseStatements(node.Expression.Consequence.Statements);
|
129
|
-
xml += '</statement>';
|
130
|
-
xml += '</block>';
|
131
|
-
}
|
132
|
-
// Add handling for other types of nodes as needed
|
133
|
-
return xml;
|
134
|
-
}
|
135
|
-
```
|
136
97
|
|
137
98
|
## 追記
|
138
99
|
~~`JSON.parse(program)`にしたときのエラー内容~~
|
12
説明追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -221,3 +221,4 @@
|
|
221
221
|
コードの細かい部分は以下のリポジトリとして置かせていただきます.
|
222
222
|
https://github.com/snym-yt/testLanguageSettings
|
223
223
|
`index.html`, `JSPMusic`フォルダ, `script.js`, `ASTtoXML.js`が該当ファイルとなります.
|
224
|
+
「ブロック化」というボタンを押すだけで今回試したいことが実行されるようにしております.
|
11
markdownの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -217,7 +217,7 @@
|
|
217
217
|
{"Statements":[{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Expression":{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Condition":{"Token":{"Token":{"type":"INT","literal":"10"}},"Value":10},"Consequence":{"Token":{"Token":{"type":"LBRACE","literal":"{"}},"Statements":[{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"60"}},"Value":60},{"Token":{"Token":{"type":"FLOAT","literal":"0.1"}},"Value":0.1}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}}]}}}]}
|
218
218
|
```
|
219
219
|
|
220
|
-
####リポジトリ
|
220
|
+
#### リポジトリ
|
221
221
|
コードの細かい部分は以下のリポジトリとして置かせていただきます.
|
222
222
|
https://github.com/snym-yt/testLanguageSettings
|
223
223
|
`index.html`, `JSPMusic`フォルダ, `script.js`, `ASTtoXML.js`が該当ファイルとなります.
|
10
リポジトリの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -90,11 +90,8 @@
|
|
90
90
|
のような形で得てしまっているのですが,ほしいのは`'{true}'`なのでずれが生じてしまっています.
|
91
91
|
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
|
92
92
|
|
93
|
-
### 前提
|
94
|
-
|
95
|
-
|
96
93
|
### 該当のソースコード
|
97
|
-
|
94
|
+
下部の追記にリポジトリとして関係するファイルはすべて置かせていただいております.
|
98
95
|
```JavaScript
|
99
96
|
var xml = "";
|
100
97
|
function makeAST(){
|
@@ -219,3 +216,8 @@
|
|
219
216
|
```
|
220
217
|
{"Statements":[{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Expression":{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Condition":{"Token":{"Token":{"type":"INT","literal":"10"}},"Value":10},"Consequence":{"Token":{"Token":{"type":"LBRACE","literal":"{"}},"Statements":[{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"60"}},"Value":60},{"Token":{"Token":{"type":"FLOAT","literal":"0.1"}},"Value":0.1}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}}]}}}]}
|
221
218
|
```
|
219
|
+
|
220
|
+
####リポジトリ
|
221
|
+
コードの細かい部分は以下のリポジトリとして置かせていただきます.
|
222
|
+
https://github.com/snym-yt/testLanguageSettings
|
223
|
+
`index.html`, `JSPMusic`フォルダ, `script.js`, `ASTtoXML.js`が該当ファイルとなります.
|
9
情報追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -138,7 +138,8 @@
|
|
138
138
|
```
|
139
139
|
|
140
140
|
## 追記
|
141
|
-
`JSON.parse(program)`にしたときのエラー内容
|
141
|
+
~~`JSON.parse(program)`にしたときのエラー内容~~
|
142
|
+
正しい手順かわかりませんが,`JSON.stringify`を通したらエラーは消えました.
|
142
143
|
```
|
143
144
|
VM2756:1 Uncaught SyntaxError: "[object Object]" is not valid JSON
|
144
145
|
at JSON.parse (<anonymous>)
|
8
スクリプト修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -148,16 +148,6 @@
|
|
148
148
|
|
149
149
|
条件の修正
|
150
150
|
```JavaScript
|
151
|
-
// Function to convert JSON AST to XML
|
152
|
-
function makeXML(ast) {
|
153
|
-
let xml = '';
|
154
|
-
xml += '<xml xmlns="http://www.w3.org/1999/xhtml">';
|
155
|
-
xml += traverseAST(ast);
|
156
|
-
xml += '</xml>';
|
157
|
-
return xml;
|
158
|
-
}
|
159
|
-
|
160
|
-
// Function to traverse the AST and generate XML
|
161
151
|
function traverseAST(node) {
|
162
152
|
let xml = '';
|
163
153
|
// Handle different types of nodes in your AST
|
7
スクリプトミスの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -223,8 +223,8 @@
|
|
223
223
|
`console.log(program)`の結果
|
224
224
|

|
225
225
|
|
226
|
-
`console.log(typeof(
|
226
|
+
`console.log(typeof(JSONobj));`の結果は`string`
|
227
|
-
`console.log(
|
227
|
+
`console.log(JSONobj);`の結果は次のようになっています.
|
228
228
|
```
|
229
229
|
{"Statements":[{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Expression":{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Condition":{"Token":{"Token":{"type":"INT","literal":"10"}},"Value":10},"Consequence":{"Token":{"Token":{"type":"LBRACE","literal":"{"}},"Statements":[{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"60"}},"Value":60},{"Token":{"Token":{"type":"FLOAT","literal":"0.1"}},"Value":0.1}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}}]}}}]}
|
230
230
|
```
|
6
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -147,7 +147,7 @@
|
|
147
147
|
```
|
148
148
|
|
149
149
|
条件の修正
|
150
|
-
```
|
150
|
+
```JavaScript
|
151
151
|
// Function to convert JSON AST to XML
|
152
152
|
function makeXML(ast) {
|
153
153
|
let xml = '';
|
5
ログ追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -146,7 +146,7 @@
|
|
146
146
|
at HTMLButtonElement.onclick (index.html:74:349)
|
147
147
|
```
|
148
148
|
|
149
|
-
条件
|
149
|
+
条件の修正
|
150
150
|
```
|
151
151
|
// Function to convert JSON AST to XML
|
152
152
|
function makeXML(ast) {
|
@@ -195,6 +195,36 @@
|
|
195
195
|
}
|
196
196
|
```
|
197
197
|
|
198
|
+
ログ確認
|
199
|
+
```JavaScript
|
200
|
+
function makeAST(){
|
201
|
+
var scriptdata = document.getElementById("codeInput").value;
|
202
|
+
scriptdata = changeBackSlashIntoSpace(scriptdata);
|
203
|
+
// console.log(scriptdata);
|
204
|
+
const l = newLexer(scriptdata);
|
205
|
+
const p = newParser(l);
|
206
|
+
const program = p.parseProgram();
|
207
|
+
checkParserErrors(p);
|
208
|
+
|
209
|
+
console.log(typeof(program));
|
210
|
+
console.log(program);
|
211
|
+
|
212
|
+
const JSONobj = JSON.stringify(program)
|
213
|
+
console.log(typeof(JSONobj));
|
214
|
+
console.log(JSONobj);
|
215
|
+
const JSONparse = JSON.parse(JSONobj)
|
216
|
+
xml = makeXML(JSONparse);
|
217
|
+
console.log(xml);
|
218
|
+
return;
|
219
|
+
}
|
220
|
+
```
|
221
|
+
|
198
222
|
`console.log(typeof(program));`の結果は`object`でした.
|
199
223
|
`console.log(program)`の結果
|
200
224
|

|
225
|
+
|
226
|
+
`console.log(typeof(program));`の結果は`string`
|
227
|
+
`console.log(program);`の結果は次のようになっています.
|
228
|
+
```
|
229
|
+
{"Statements":[{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Expression":{"Token":{"Token":{"type":"LOOP","literal":"loop"}},"Condition":{"Token":{"Token":{"type":"INT","literal":"10"}},"Value":10},"Consequence":{"Token":{"Token":{"type":"LBRACE","literal":"{"}},"Statements":[{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"60"}},"Value":60},{"Token":{"Token":{"type":"FLOAT","literal":"0.1"}},"Value":0.1}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}},{"Token":{"Token":{"type":"IDENT","literal":"play"}},"Expression":{"Token":{"Token":{"type":"LPAREN","literal":"("},"Function":{"Token":{"Token":{"type":"IDENT","literal":"play"},"Value":"play"}}},"Arguments":[{"Token":{"Token":{"type":"INT","literal":"0"}},"Value":0},{"Token":{"Token":{"type":"FLOAT","literal":"0.0"}},"Value":0}]}}]}}}]}
|
230
|
+
```
|
4
画像の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -194,3 +194,7 @@
|
|
194
194
|
return xml;
|
195
195
|
}
|
196
196
|
```
|
197
|
+
|
198
|
+
`console.log(typeof(program));`の結果は`object`でした.
|
199
|
+
`console.log(program)`の結果
|
200
|
+

|
3
スクリプト修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -145,3 +145,52 @@
|
|
145
145
|
at makeAST (script.js:404:24)
|
146
146
|
at HTMLButtonElement.onclick (index.html:74:349)
|
147
147
|
```
|
148
|
+
|
149
|
+
条件分の修正
|
150
|
+
```
|
151
|
+
// Function to convert JSON AST to XML
|
152
|
+
function makeXML(ast) {
|
153
|
+
let xml = '';
|
154
|
+
xml += '<xml xmlns="http://www.w3.org/1999/xhtml">';
|
155
|
+
xml += traverseAST(ast);
|
156
|
+
xml += '</xml>';
|
157
|
+
return xml;
|
158
|
+
}
|
159
|
+
|
160
|
+
// Function to traverse the AST and generate XML
|
161
|
+
function traverseAST(node) {
|
162
|
+
let xml = '';
|
163
|
+
// Handle different types of nodes in your AST
|
164
|
+
if (node.Token && node.Token.Token && node.Token.Token.type === "LOOP") {
|
165
|
+
xml += '<block type="controls_repeat_ext" id="T,:lx`qH6`%re*cN8lOx" x="-5" y="23">';
|
166
|
+
xml += '<value name="TIMES">';
|
167
|
+
xml += `<shadow type="math_number" id="GamoPT;mPC@7[FE#B4W!"><field name="NUM">${node.Expression.Condition.Value}</field></shadow>`;
|
168
|
+
xml += '</value>';
|
169
|
+
xml += '<statement name="DO">';
|
170
|
+
xml += traverseStatements(node.Expression.Consequence.Statements);
|
171
|
+
xml += '</statement>';
|
172
|
+
xml += '</block>';
|
173
|
+
}
|
174
|
+
// Add handling for other types of nodes as needed
|
175
|
+
return xml;
|
176
|
+
}
|
177
|
+
|
178
|
+
// Function to traverse statements inside a block
|
179
|
+
function traverseStatements(statements) {
|
180
|
+
let xml = '';
|
181
|
+
statements.forEach(statement => {
|
182
|
+
if (statement.Token && statement.Token.Token && statement.Token.Token.type === 'IDENT') {
|
183
|
+
xml += `<block type="${statement.Token.Token.literal}" id="${generateUniqueId(24)}" x="-5" y="23">`;
|
184
|
+
xml += '<field name="Note No.">';
|
185
|
+
xml += statement.Expression.Arguments[0].Value;
|
186
|
+
xml += '</field>';
|
187
|
+
xml += '<field name="during">';
|
188
|
+
xml += statement.Expression.Arguments[1].Value;
|
189
|
+
xml += '</field>';
|
190
|
+
xml += '</block>';
|
191
|
+
}
|
192
|
+
// Add handling for other types of statements as needed
|
193
|
+
});
|
194
|
+
return xml;
|
195
|
+
}
|
196
|
+
```
|
2
error分の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -137,4 +137,11 @@
|
|
137
137
|
}
|
138
138
|
```
|
139
139
|
|
140
|
-
|
140
|
+
## 追記
|
141
|
+
`JSON.parse(program)`にしたときのエラー内容
|
142
|
+
```
|
143
|
+
VM2756:1 Uncaught SyntaxError: "[object Object]" is not valid JSON
|
144
|
+
at JSON.parse (<anonymous>)
|
145
|
+
at makeAST (script.js:404:24)
|
146
|
+
at HTMLButtonElement.onclick (index.html:74:349)
|
147
|
+
```
|
1
stringifyのリンク追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -88,6 +88,7 @@
|
|
88
88
|
`JSON.JSON.stringify`でJSON形式を得ようと思ったのですが,この関数を使用すると,
|
89
89
|
`JSON.JSON.stringify("{true}"); // '"{true}"'`
|
90
90
|
のような形で得てしまっているのですが,ほしいのは`'{true}'`なのでずれが生じてしまっています.
|
91
|
+
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
|
91
92
|
|
92
93
|
### 前提
|
93
94
|
|