1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml">
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9 <title>Ring へ Ring を組み込むには — プログラミング言語 Ring 1.12 取扱説明書</title>
11 <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12 <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
18 COLLAPSE_INDEX: false,
23 <script type="text/javascript" src="_static/jquery.js"></script>
24 <script type="text/javascript" src="_static/underscore.js"></script>
25 <script type="text/javascript" src="_static/doctools.js"></script>
26 <script type="text/javascript" src="_static/translations.js"></script>
27 <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
28 <link rel="next" title="チュートリアル: C/C++ による拡張機能の開発方法" href="extension_tutorial.html" />
29 <link rel="prev" title="トレースライブラリとインタラクティブデバッガ" href="debug.html" />
30 <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
33 <body role="document">
35 <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">🍩Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
38 <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
39 <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
40 <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
41 <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
42 <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
43 <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
45 <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46 <li><a title="総合索引" href="genindex.html">Index</a></li>
50 <form action="search.html" method="get">
51 <input type="text" name="q" placeholder="Search" />
52 <input type="hidden" name="check_keywords" value="yes" />
53 <input type="hidden" name="area" value="default" />
64 <a href="extension_tutorial.html" title="チュートリアル: C/C++ による拡張機能の開発方法">
69 <a href="debug.html" title="トレースライブラリとインタラクティブデバッガ">
75 <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
79 <li>Ring へ Ring を組み込むには</li>
84 <div class="document">
85 <div class="documentwrapper">
86 <div class="bodywrapper">
87 <div class="body" role="main">
89 <div class="section" id="ring-ring">
90 <span id="index-0"></span><h1>Ring へ Ring を組み込むには<a class="headerlink" href="#ring-ring" title="このヘッドラインへのパーマリンク">¶</a></h1>
91 <p>Ring プログラム、またはアプリケーションへ Ring を組み込む方法を学びます。</p>
92 <div class="section" id="index-1">
93 <span id="id1"></span><h2>ステートを共有せずに Ring へ Ring を組み込むには<a class="headerlink" href="#index-1" title="このヘッドラインへのパーマリンク">¶</a></h2>
94 <p>Ring 1.0 より Ring を C へ組み込むための関数は実装されていました。
95 また eval() 関数で Ring プログラム内で Ring のコードを実行できます。
96 この公開版では、ステートを共有せずに Ring を Ring プログラムへ組み込むための関数があります。</p>
98 <ol class="arabic simple">
99 <li>Ring プログラムとアプリケーションの統合で競合が発生しません。</li>
100 <li>Ring のコードを安全な環境で実行して、トレースを行えます。</li>
103 <div class="highlight-ring"><div class="highlight"><pre><span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">()</span>
104 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"See 'Hello, World!'+nl"</span><span class="p">)</span>
105 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x = 10"</span><span class="p">)</span>
107 <span class="n">pState2</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">()</span>
108 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState2</span><span class="p">,</span><span class="s">"See 'Hello, World!'+nl"</span><span class="p">)</span>
109 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState2</span><span class="p">,</span><span class="s">"x = 20"</span><span class="p">)</span>
111 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"see x +nl"</span><span class="p">)</span>
112 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState2</span><span class="p">,</span><span class="s">"see x +nl"</span><span class="p">)</span>
114 <span class="n">v1</span> <span class="o">=</span> <span class="n">ring_state_findvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x"</span><span class="p">)</span>
115 <span class="n">v2</span> <span class="o">=</span> <span class="n">ring_state_findvar</span><span class="p">(</span><span class="n">pState2</span><span class="p">,</span><span class="s">"x"</span><span class="p">)</span>
117 <span class="k">see</span> <span class="n">v1</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span> <span class="o">+</span> <span class="n">nl</span>
118 <span class="k">see</span> <span class="n">V2</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span> <span class="o">+</span> <span class="n">nl</span>
120 <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">)</span>
121 <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState2</span><span class="p">)</span>
125 <div class="highlight-ring"><div class="highlight"><pre><span class="n">Hello</span><span class="p">,</span> <span class="n">World</span><span class="o">!</span>
126 <span class="n">Hello</span><span class="p">,</span> <span class="n">World</span><span class="o">!</span>
127 <span class="mi">10</span>
128 <span class="mi">20</span>
129 <span class="mi">10</span>
130 <span class="mi">20</span>
134 <div class="section" id="index-2">
135 <span id="id2"></span><h2>プログラムの直列実行<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
136 <p>ring_state_main() 関数はアプリケーションの実行後に、別のアプリケーションを実行します。</p>
138 <div class="highlight-ring"><div class="highlight"><pre><span class="n">chdir</span><span class="p">(</span><span class="n">exefolder</span><span class="p">()</span><span class="o">+</span><span class="s">"/../applications/formdesigner"</span><span class="p">)</span>
139 <span class="n">ring_state_main</span><span class="p">(</span><span class="sc">'formdesigner.ring'</span><span class="p">)</span>
140 <span class="n">chdir</span><span class="p">(</span><span class="n">exefolder</span><span class="p">()</span><span class="o">+</span><span class="s">"/../applications/cards"</span><span class="p">)</span>
141 <span class="n">ring_state_main</span><span class="p">(</span><span class="sc">'cards.ring'</span><span class="p">)</span>
145 <div class="section" id="ring-state-setvar">
146 <span id="index-3"></span><h2>ring_state_setvar()<a class="headerlink" href="#ring-state-setvar" title="このヘッドラインへのパーマリンク">¶</a></h2>
147 <p>ring_state_setvar() 関数は変数の値を設定します。</p>
148 <p>値には「文字列、数値、リスト、または C ポインタ」を指定します。</p>
149 <p>この関数は下位 Ring 環境へリストとC ポインタを手早く渡すために必要です。</p>
151 <div class="highlight-none"><div class="highlight"><pre>ring_state_setvar(oState,cVariableName,Value)
155 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"guilib.ring"</span>
157 <span class="n">myapp</span> <span class="o">=</span> <span class="kp">null</span>
158 <span class="n">win</span> <span class="o">=</span> <span class="kp">null</span>
160 <span class="k">func</span> <span class="n">main</span>
161 <span class="n">myapp</span> <span class="o">=</span> <span class="k">new</span> <span class="n">qApp</span> <span class="p">{</span>
162 <span class="n">win</span> <span class="o">=</span> <span class="k">new</span> <span class="n">qWidget</span><span class="p">()</span> <span class="p">{</span>
163 <span class="n">setWindowTitle</span><span class="p">(</span><span class="s">"Advanced Example on using ring_state_setvar()"</span><span class="p">)</span>
164 <span class="n">move</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">100</span><span class="p">)</span>
165 <span class="n">resize</span><span class="p">(</span><span class="mi">600</span><span class="p">,</span><span class="mi">400</span><span class="p">)</span>
166 <span class="k">new</span> <span class="n">qPushButton</span><span class="p">(</span><span class="n">win</span><span class="p">)</span> <span class="p">{</span>
167 <span class="n">setText</span><span class="p">(</span><span class="s">"Test"</span><span class="p">)</span>
168 <span class="n">setClickEvent</span><span class="p">(</span><span class="s">"Test()"</span><span class="p">)</span>
169 <span class="p">}</span>
170 <span class="c"># Qt でタイマーの作成とウィンドウを閉じる動作を行います。</span>
171 <span class="c"># これだけでウィンドウを閉じるには不十分です。</span>
172 <span class="c"># このために下位環境では load 'guilib.ring' を</span>
173 <span class="c"># 必ず使用してください。</span>
174 <span class="n">oFilter</span> <span class="o">=</span> <span class="k">new</span> <span class="n">qAllEvents</span><span class="p">(</span><span class="n">win</span><span class="p">)</span>
175 <span class="n">oFilter</span><span class="p">.</span><span class="n">setCloseEvent</span><span class="p">(</span><span class="s">"myapp.quit()"</span><span class="p">)</span>
176 <span class="n">win</span><span class="p">.</span><span class="n">installeventfilter</span><span class="p">(</span><span class="n">oFilter</span><span class="p">)</span>
177 <span class="n">show</span><span class="p">()</span>
178 <span class="p">}</span>
179 <span class="n">exec</span><span class="p">()</span>
180 <span class="p">}</span>
182 <span class="k">func</span> <span class="n">test</span>
183 <span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">()</span>
184 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pstate</span><span class="p">,</span><span class="s">"load 'guilib.ring'"</span><span class="p">)</span>
185 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x = NULL"</span><span class="p">)</span>
186 <span class="c"># 文字列を渡します。</span>
187 <span class="n">ring_state_setvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x"</span><span class="p">,</span><span class="s">"hello"</span><span class="p">)</span>
188 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"? x"</span><span class="p">)</span>
189 <span class="c"># 数値を渡します。</span>
190 <span class="n">ring_state_setvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x"</span><span class="p">,</span><span class="mi">100</span><span class="p">)</span>
191 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"? x"</span><span class="p">)</span>
192 <span class="c"># Pass List</span>
193 <span class="n">ring_state_setvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x"</span><span class="p">,</span><span class="o">[</span><span class="s">"one"</span><span class="p">,</span><span class="s">"two"</span><span class="p">,</span><span class="s">"three"</span><span class="o">]</span><span class="p">)</span>
194 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"? x"</span><span class="p">)</span>
195 <span class="c"># リストを渡します。</span>
196 <span class="c"># Ring オブジェクトを渡すことはできません (win)。</span>
197 <span class="c"># 理由としてオブジェクトはクラス情報のポインタとして格納されているからです。</span>
198 <span class="c"># またクラスは Ring の親環境と関連付けられています。</span>
199 <span class="c"># しかし、下位 Ring 環境にはアクセスできません。</span>
200 <span class="c"># ですが win.pObject のようにすれば C ポインタを渡せます。</span>
201 <span class="n">ring_state_setvar</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"x"</span><span class="p">,</span><span class="n">win</span><span class="p">.</span><span class="n">pObject</span><span class="p">)</span>
202 <span class="c"># さて、オブジェクトを再作成しましたが同じ C ポインタを使用しています。</span>
203 <span class="c"># したがって親 Ring 環境にある同じウィンドウへアクセスできます。</span>
204 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"</span>
205 <span class="k">new</span> <span class="n">qWidget</span> <span class="p">{</span>
206 <span class="n">pObject</span> <span class="o">=</span> <span class="n">x</span>
207 <span class="n">setwindowtitle</span><span class="p">(</span><span class="sc">'Message from the Sub Ring Environment'</span><span class="p">)</span>
208 <span class="p">}</span>
209 <span class="s">")</span>
210 <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">)</span>
214 <div class="section" id="ring-state-new-ring-state-mainfile">
215 <span id="index-4"></span><h2>ring_state_new() と ring_state_mainfile() 関数<a class="headerlink" href="#ring-state-new-ring-state-mainfile" title="このヘッドラインへのパーマリンク">¶</a></h2>
216 <p>ring_state_new() と ring_state_mainfile() 関数は Ring プログラムから別の Ring プログラムを実行します。</p>
217 <p>ring_state_main() 関数とは異なり、こちらは Ring ステートの削除時に制御できます!</p>
218 <p>これは GUI プログラムから別の GUI プログラムを実行するときに重要です。</p>
219 <p>この場合の理由は GUI ライブラリ (RingQt) を共有しており、</p>
220 <p>呼び出し元は qApp.Exec() を呼び出すからです。</p>
221 <p>よって、下位プログラムを停止せずにメインプログラムへ戻ります。</p>
222 <p>ここで下位プログラムのステートを削除してしまうと、下位プログラムのイベント実行時に問題が発生します。</p>
223 <p>ステートを保持することは、下位 GUI プログラムの収容先となっている GUI プログラムでは重要です。</p>
225 <div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"guilib.ring"</span>
227 <span class="k">func</span> <span class="n">main</span>
228 <span class="k">new</span> <span class="n">qApp</span> <span class="p">{</span>
229 <span class="n">win</span> <span class="o">=</span> <span class="k">new</span> <span class="n">qWidget</span><span class="p">()</span> <span class="p">{</span>
230 <span class="n">setWindowTitle</span><span class="p">(</span><span class="s">"Test ring_state_mainfile()"</span><span class="p">)</span>
231 <span class="n">resize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span><span class="mi">400</span><span class="p">)</span> <span class="n">move</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">100</span><span class="p">)</span>
232 <span class="n">btn</span> <span class="o">=</span> <span class="k">new</span> <span class="n">qPushButton</span><span class="p">(</span><span class="n">Win</span><span class="p">)</span> <span class="p">{</span>
233 <span class="n">settext</span><span class="p">(</span><span class="s">"test"</span><span class="p">)</span>
234 <span class="n">setclickevent</span><span class="p">(</span><span class="s">"mytest()"</span><span class="p">)</span>
235 <span class="p">}</span>
236 <span class="n">show</span><span class="p">()</span>
237 <span class="p">}</span>
238 <span class="n">exec</span><span class="p">()</span>
239 <span class="p">}</span>
241 <span class="k">func</span> <span class="n">mytest</span>
242 <span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_new</span><span class="p">()</span>
243 <span class="n">ring_state_mainfile</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">"runprogram.ring"</span><span class="p">)</span>
244 <span class="c"># ここで GUI アプリケーションを実行する場合はステートを削除しないでください。</span>
245 <span class="c"># なお GUI アプリケーションのイベントを実行できます。</span>
246 <span class="o">//</span> <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">)</span>
249 <p>この機能を使用する場合は、前述の用例を基にアプリケーションで必要な更新をすることを覚えておいてください。</p>
250 <p>この時点で ring_state_delete() 関数を呼び出すとメモリリークを回避できます!</p>
252 <div class="section" id="index-5">
253 <span id="id3"></span><h2>Ring へ Ring を組み込んだときのランタイムエラーについて<a class="headerlink" href="#index-5" title="このヘッドラインへのパーマリンク">¶</a></h2>
254 <p>Ring 1.8 から Ring へ Ring を組み込んだときに、</p>
255 <p>ゲスト環境でエラーが発生してもホストは異常終了しなくなりました。</p>
257 <div class="highlight-ring"><div class="highlight"><pre><span class="o">?</span> <span class="s">"Start the test!"</span>
259 <span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_init</span><span class="p">()</span>
261 <span class="n">ring_state_runcode</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="s">" ? 'Let us try having an error' ? x"</span><span class="p">)</span>
263 <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">)</span>
265 <span class="o">?</span> <span class="s">""</span>
266 <span class="o">?</span> <span class="s">"End of test!"</span>
270 <div class="highlight-none"><div class="highlight"><pre>Start the test!
271 Let us try having an error
273 Line 1 Error (R24) : Using uninitialized variable : x
274 in file Ring_EmbeddedCode
279 <div class="section" id="ring-state-filetokens">
280 <span id="index-6"></span><h2>ring_state_filetokens() 関数<a class="headerlink" href="#ring-state-filetokens" title="このヘッドラインへのパーマリンク">¶</a></h2>
281 <p>Ring 1.12 では ring_state_filetokens() 関数に対応しました。</p>
282 <p>ring_state_filetokens() 関数は Ring ソースコードファイルにあるトークンを一括取得します。</p>
283 <div class="highlight-ring"><div class="highlight"><pre><span class="n">C_FILENAME</span> <span class="o">=</span> <span class="s">"test_tokens.ring"</span>
284 <span class="n">C_WIDTH</span> <span class="o">=</span> <span class="mi">12</span>
286 <span class="c"># ファイルの書き込み</span>
287 <span class="n">write</span><span class="p">(</span><span class="n">C_FILENAME</span><span class="p">,</span><span class="sc">'</span>
288 <span class="k">see</span> <span class="s">"Hello, World!"</span>
289 <span class="o">?</span> <span class="mi">3</span><span class="o">*</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span>
290 <span class="n">Name</span> <span class="o">=</span> <span class="s">"Ring"</span>
291 <span class="o">?</span> <span class="n">Name</span>
292 <span class="sc">')</span>
294 <span class="c"># トークンの種類</span>
295 <span class="n">C_KEYWORD</span> <span class="o">=</span> <span class="mi">0</span>
296 <span class="n">C_OPERATOR</span> <span class="o">=</span> <span class="mi">1</span>
297 <span class="n">C_LITERAL</span> <span class="o">=</span> <span class="mi">2</span>
298 <span class="n">C_NUMBER</span> <span class="o">=</span> <span class="mi">3</span>
299 <span class="n">C_IDENTIFIER</span> <span class="o">=</span> <span class="mi">4</span>
300 <span class="n">C_ENDLINE</span> <span class="o">=</span> <span class="mi">5</span>
302 <span class="c"># キーワードリスト</span>
303 <span class="n">aKEYWORDS</span> <span class="o">=</span> <span class="o">[</span><span class="s">"IF"</span><span class="p">,</span><span class="s">"TO"</span><span class="p">,</span><span class="s">"OR"</span><span class="p">,</span><span class="s">"AND"</span><span class="p">,</span><span class="s">"NOT"</span><span class="p">,</span><span class="s">"FOR"</span><span class="p">,</span><span class="s">"NEW"</span><span class="p">,</span><span class="s">"FUNC"</span><span class="p">,</span>
304 <span class="s">"FROM"</span><span class="p">,</span><span class="s">"NEXT"</span><span class="p">,</span><span class="s">"LOAD"</span><span class="p">,</span><span class="s">"ELSE"</span><span class="p">,</span><span class="s">"SEE"</span><span class="p">,</span><span class="s">"WHILE"</span><span class="p">,</span><span class="s">"OK"</span><span class="p">,</span><span class="s">"CLASS"</span><span class="p">,</span><span class="s">"RETURN"</span><span class="p">,</span><span class="s">"BUT"</span><span class="p">,</span>
305 <span class="s">"END"</span><span class="p">,</span><span class="s">"GIVE"</span><span class="p">,</span><span class="s">"BYE"</span><span class="p">,</span><span class="s">"EXIT"</span><span class="p">,</span><span class="s">"TRY"</span><span class="p">,</span><span class="s">"CATCH"</span><span class="p">,</span><span class="s">"DONE"</span><span class="p">,</span><span class="s">"SWITCH"</span><span class="p">,</span><span class="s">"ON"</span><span class="p">,</span><span class="s">"OTHER"</span><span class="p">,</span><span class="s">"OFF"</span><span class="p">,</span>
306 <span class="s">"IN"</span><span class="p">,</span><span class="s">"LOOP"</span><span class="p">,</span><span class="s">"PACKAGE"</span><span class="p">,</span><span class="s">"IMPORT"</span><span class="p">,</span><span class="s">"PRIVATE"</span><span class="p">,</span><span class="s">"STEP"</span><span class="p">,</span><span class="s">"DO"</span><span class="p">,</span><span class="s">"AGAIN"</span><span class="p">,</span><span class="s">"CALL"</span><span class="p">,</span><span class="s">"ELSEIF"</span><span class="p">,</span>
307 <span class="s">"PUT"</span><span class="p">,</span><span class="s">"GET"</span><span class="p">,</span><span class="s">"CASE"</span><span class="p">,</span><span class="s">"DEF"</span><span class="p">,</span><span class="s">"ENDFUNC"</span><span class="p">,</span><span class="s">"ENDCLASS"</span><span class="p">,</span><span class="s">"ENDPACKAGE"</span><span class="p">,</span>
308 <span class="s">"CHANGERINGKEYWORD"</span><span class="p">,</span><span class="s">"CHANGERINGOPERATOR"</span><span class="p">,</span><span class="s">"LOADSYNTAX"</span><span class="o">]</span>
310 <span class="n">pState</span> <span class="o">=</span> <span class="n">ring_state_new</span><span class="p">()</span>
311 <span class="n">aList</span> <span class="o">=</span> <span class="n">ring_state_filetokens</span><span class="p">(</span><span class="n">pState</span><span class="p">,</span><span class="n">C_FILENAME</span><span class="p">)</span>
312 <span class="n">PrintTokens</span><span class="p">(</span><span class="n">aList</span><span class="p">)</span>
313 <span class="n">ring_state_delete</span><span class="p">(</span><span class="n">pState</span><span class="p">)</span>
315 <span class="k">func</span> <span class="n">PrintTokens</span> <span class="n">aList</span>
316 <span class="k">for</span> <span class="n">aToken</span> <span class="k">in</span> <span class="n">aList</span>
317 <span class="k">switch</span> <span class="n">aToken</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
318 <span class="k">on</span> <span class="n">C_KEYWORD</span>
319 <span class="o">?</span> <span class="n">Width</span><span class="p">(</span><span class="s">"Keyword"</span><span class="p">,</span><span class="n">C_WIDTH</span><span class="p">)</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">aKeywords</span><span class="o">[</span><span class="mi">0</span><span class="o">+</span><span class="n">aToken</span><span class="o">[</span><span class="mi">2</span><span class="o">]]</span>
320 <span class="k">on</span> <span class="n">C_OPERATOR</span>
321 <span class="o">?</span> <span class="n">Width</span><span class="p">(</span><span class="s">"Operator"</span><span class="p">,</span><span class="n">C_WIDTH</span><span class="p">)</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">aToken</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
322 <span class="k">on</span> <span class="n">C_LITERAL</span>
323 <span class="o">?</span> <span class="n">Width</span><span class="p">(</span><span class="s">"Literal"</span><span class="p">,</span><span class="n">C_WIDTH</span><span class="p">)</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">aToken</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
324 <span class="k">on</span> <span class="n">C_NUMBER</span>
325 <span class="o">?</span> <span class="n">Width</span><span class="p">(</span><span class="s">"Number"</span><span class="p">,</span><span class="n">C_WIDTH</span><span class="p">)</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">aToken</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
326 <span class="k">on</span> <span class="n">C_IDENTIFIER</span>
327 <span class="o">?</span> <span class="n">Width</span><span class="p">(</span><span class="s">"Identifier"</span><span class="p">,</span><span class="n">C_WIDTH</span><span class="p">)</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">aToken</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
328 <span class="k">on</span> <span class="n">C_ENDLINE</span>
329 <span class="o">?</span> <span class="s">"EndLine"</span>
330 <span class="k">other</span>
332 <span class="k">off</span>
333 <span class="k">next</span>
335 <span class="k">func</span> <span class="n">Width</span> <span class="n">cText</span><span class="p">,</span><span class="n">nWidth</span>
336 <span class="k">return</span> <span class="n">cText</span><span class="o">+</span><span class="n">copy</span><span class="p">(</span><span class="s">" "</span><span class="p">,</span><span class="n">nWidth</span><span class="o">-</span><span class="n">len</span><span class="p">(</span><span class="n">cText</span><span class="p">))</span>
340 <div class="highlight-none"><div class="highlight"><pre>EndLine
342 Literal : Hello, World!
367 <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
368 <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
370 <li><a class="reference internal" href="#">Ring へ Ring を組み込むには</a><ul>
371 <li><a class="reference internal" href="#index-1">ステートを共有せずに Ring へ Ring を組み込むには</a></li>
372 <li><a class="reference internal" href="#index-2">プログラムの直列実行</a></li>
373 <li><a class="reference internal" href="#ring-state-setvar">ring_state_setvar()</a></li>
374 <li><a class="reference internal" href="#ring-state-new-ring-state-mainfile">ring_state_new() と ring_state_mainfile() 関数</a></li>
375 <li><a class="reference internal" href="#index-5">Ring へ Ring を組み込んだときのランタイムエラーについて</a></li>
376 <li><a class="reference internal" href="#ring-state-filetokens">ring_state_filetokens() 関数</a></li>
383 <p class="topless"><a href="debug.html"
384 title="前の章へ">トレースライブラリとインタラクティブデバッガ</a></p>
386 <p class="topless"><a href="extension_tutorial.html"
387 title="次の章へ">チュートリアル: C/C++ による拡張機能の開発方法</a></p>
388 <div role="note" aria-label="source link">
390 <ul class="this-page-menu">
391 <li><a href="_sources/ringemb.txt"
392 rel="nofollow">ソースコードを表示</a></li>
396 <form action="search.html" method="get">
397 <input type="text" name="q" placeholder="Search" />
398 <input type="hidden" name="check_keywords" value="yes" />
399 <input type="hidden" name="area" value="default" />
404 <div class="clearer"></div>
406 <footer class="footer">
407 <p class="pull-right">
408 <a href="_sources/ringemb.txt"
409 rel="nofollow">Page Source</a>
410 <a href="#">Back to Top</a></p>
412 © Copyright 2016-2020, Ring Team.<br/>
413 Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)