image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2007年6月3日 | トップページ | 2007年6月5日 »

2007年6月4日

2007-06-04

racc で xvcd を生成することを試し始めた (その3)

条件判定、関数定義を実装した。
racc ソースは現状あまりに乱雑なので、ソース掲載は次回の投稿で。

今は こんなふうな変換ができている。

入力
======

# //==== assign ====
message = 'funcall ok'
message = true
message = false
message = message
message = foo(a,b,"x")
message = foo(boo())
message = foo(boo(a))
message = foo(boo(a), zoo(b))

# //==== function-call ====
puts( "abc" )
puts( func0() )
puts( a )

# //==== if then end =====
if "$a=''" then
  x = "ONE"
  y = "TWO"
end

# //==== def func =====
def func0()
a="local"
  puts('in func0()')
end
func0()
#
def func1(a, b, c)
  puts('in func1()')
end
func1("A", "B", "foo(a)")

出力
======

<instruction:variable name="message" select="'funcall ok'"/>
<instruction:variable name="message" select="'true'"/>
<instruction:variable name="message" select="'false'"/>
<instruction:variable name="message" select="$message"/>
<instruction:variable name="message" select="foo($a,$b,'x')"/>
<instruction:variable name="message" select="foo(boo())"/>
<instruction:variable name="message" select="foo(boo($a))"/>
<instruction:variable name="message" select="foo(boo($a),zoo($b))"/>
<instruction:message-box>
  <xvcd:value-of select="'abc'"/>
</instruction:message-box>
<instruction:message-box>
  <xvcd:value-of select="func0()"/>
</instruction:message-box>
<instruction:message-box>
  <xvcd:value-of select="$a"/>
</instruction:message-box>
<instruction:if test="$a=''">
  <instruction:variable name="x" select="'ONE'"/>
  <instruction:variable name="y" select="'TWO'"/>
</instruction:if>
<instruction:command name="func0">
  <instruction:variable name="a" select="'local'"/>
  <instruction:message-box>
    <xvcd:value-of select="'in func0()'"/>
  </instruction:message-box>
</instruction:command>
<instruction:call name="func0">
</instruction:call>
<instruction:command name="func1">
  <instruction:with-param  name="a"/>
  <instruction:with-param  name="b"/>
  <instruction:with-param  name="c"/>
  <instruction:message-box>
    <xvcd:value-of select="'in func1()'"/>
  </instruction:message-box>
</instruction:command>
<instruction:call name="func1">
  <instruction:with-param name="a" select="'A'"/>
  <instruction:with-param name="b" select="'B'"/>
  <instruction:with-param name="c" select="'foo(a)'"/>
</instruction:call>

次のような規則で動いている。

- // で始まる行は xml のコメント要素になる。
- 代入文が、xfy/xvcd の variable 要素になる。
- true, false は定数として扱う。
- def foo(...) が xfy/xvcd の command 要素になる。
- puts が、xfy/xvcd の message-box 要素になる。
- puts 以外の 関数呼び出し foo(...) が xfy/xvcd の call 要素になる
- if ... then  ... end が xfy/xvcd の if 要素になる。
  条件文は、文字列で指定する。(xvcd の <condition:if test="xxx"> の "xxx" そのものを指定する)

次は if ... else ... end, if ... elseif ... end を実装しよう。

この入力言語のレベルで継承機能をサポートすれば、 類似 xvcd の記述が
簡素化できるとも思っている。

そのまえに、unit-test 環境もつくらないと。目視での出力結果チェックはもう無理のなってきている。

« 2007年6月3日 | トップページ | 2007年6月5日 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク