質問編集履歴

15

困ったことの追記

2024/05/04 12:10

投稿

aaaa____
aaaa____

スコア27

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

画像追加

2024/05/04 12:04

投稿

aaaa____
aaaa____

スコア27

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-05-04/ae337eac-a32c-4e1e-87c6-86bd06306afe.png)
180
182
 
181
183
  #### リポジトリ
182
184
  コードの細かい部分は以下のリポジトリとして置かせていただきます.

13

不要コードの削除

2024/05/04 11:57

投稿

aaaa____
aaaa____

スコア27

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
- var scriptdata = document.getElementById("codeInput").value;
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

説明追加

2024/05/04 11:54

投稿

aaaa____
aaaa____

スコア27

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の修正

2024/05/04 11:39

投稿

aaaa____
aaaa____

スコア27

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

リポジトリの追加

2024/05/04 11:38

投稿

aaaa____
aaaa____

スコア27

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

情報追加

2024/05/04 02:21

投稿

aaaa____
aaaa____

スコア27

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

スクリプト修正

2024/05/04 02:18

投稿

aaaa____
aaaa____

スコア27

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

スクリプトミスの修正

2024/05/04 02:14

投稿

aaaa____
aaaa____

スコア27

test CHANGED
File without changes
test CHANGED
@@ -223,8 +223,8 @@
223
223
  `console.log(program)`の結果
224
224
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-05-04/e5ebf1fc-7eef-4e67-abf4-a3bcc2c65d06.png)
225
225
 
226
- `console.log(typeof(program));`の結果は`string`
226
+ `console.log(typeof(JSONobj));`の結果は`string`
227
- `console.log(program);`の結果は次のようになっています.
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

修正

2024/05/04 02:02

投稿

aaaa____
aaaa____

スコア27

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

ログ追加

2024/05/04 02:01

投稿

aaaa____
aaaa____

スコア27

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
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-05-04/e5ebf1fc-7eef-4e67-abf4-a3bcc2c65d06.png)
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

画像の追加

2024/05/04 01:39

投稿

aaaa____
aaaa____

スコア27

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-05-04/e5ebf1fc-7eef-4e67-abf4-a3bcc2c65d06.png)

3

スクリプト修正

2024/05/04 01:24

投稿

aaaa____
aaaa____

スコア27

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分の追加

2024/04/29 11:39

投稿

aaaa____
aaaa____

スコア27

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のリンク追加

2024/04/25 01:45

投稿

aaaa____
aaaa____

スコア27

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