image

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

検索

最近のトラックバック

無料ブログはココログ

« 2007年6月13日 | トップページ | 2007年6月15日 »

2007年6月14日

2007-06-14

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

ruby のracc を使って、xfy/xvcd を書きやすくすることの実験を続けています。

いままでは、EOL(改行)を 文の区切りとしていたが、
; を文の区切りとするようにシンタックスを変更しました。
この変更をした理由は、
  foo(a,
      b);
のように、パラメータ部を複数行の分けて書けるようにする為。

また、<xvcd:xvcd>, <xvcd:template> も関数として記述できるようにしました。

以下に 変更した文法と、それに沿った入力コードを示します。
(生成される xvcd は前回のものと変りはありません)

文法 (アクション部は省略)
===

rule

  program   : stmt_list

  stmt_list :
            | stmt_list stmt
            | stmt_list SCOL

stmt_block :
            | LPA stmt_list RPA

  stmt      : primary
            | assign
            | if_stmt
            | while_stmt
            | defun
            | comment
            | heredoc

  if_stmt   : IF string_cond THEN stmt_list elseif_cause else_cause END

  elseif_cause :
             | ELSEIF string_cond THEN stmt_list elseif_cause

  else_cause :
             | ELSE stmt_list

  string_cond :  STRING

  defun     : DEF IDENT param stmt_list END

  param     : '(' name_list ')'
            | '(' ')'

  name_list : IDENT
            | name_list ',' IDENT

  assign    : IDENT '=' primary

  primary  : IDENT
            | NUMBER
            | STRING
            | TRUE
            | FALSE
            | funcall

  funcall   : IDENT '(' args ')'  stmt_block
            | IDENT '(' ')'  stmt_block

  args      : primary
            | args ',' primary

  comment    : COMMENT

  heredoc    : HEREDOC

end

入力コード例
===========

<<
// "Genereated using racc. 2007-06-09"
<<
xvcd(
    "xmlns",             "http://www.w3.org/1999/xhtml",
    "xmlns:xvcd",        "http://xmlns.xfy.com/xvcd",
    "xmlns:instruction", "http://xmlns.xfy.com/instruction",
    "xmlns:ctrl",        "http://xmlns.xfy.com/controls",
    "xmlns:event",       "http://xmlns.xfy.com/event",
    "xmlns:ui",          "http://xmlns.xfy.com/ui",
    "xmlns:command",     "http://xmlns.xfy.com/command",
    "xmlns:ab",          "http://xmlns.example.com/developer/tutorial/addressbook",
    "version",           "1.0"
) {

<<
  //============== VOCABULARY ==========
  vocabulary("name",         "AddressBook",
             "match",        "ab:addressbook",
             "call-template","Root") {
    //============== MENU ==========
<<    <ui:ui version="1.0">
<<      <ui:main-menu>
<<        <ui:menu label="Entry">
<<          <ui:menu-item label="add" command="AddEntry" open-dialog="true" />
<<          <ui:menu-item label="edit" command="EditEntry" open-dialog="true" />
<<        </ui:menu>
<<      </ui:main-menu>
<<    </ui:ui>
  };

<<
  //============== COMMAND ==========
  def AddEntry(a, b)
    dialog("return-to", "result") {
<<       <ab:edit-dialog>
<<            <ab:entry>
<<                <ab:person />
<<                <ab:address />
<<            </ab:entry>
<<        </ab:edit-dialog>
    };

    if "'ok'=$result/ab:edit-dialog/@closed-by" then
      insert("select","/ab:addressbook", "position","last-child") {
        copy_of("select", "$result//ab:entry");
      };
    end
  end

<<
  //============== TEMPLATE ==========
  template("name", "EditDialogRoot") {
<<    <html>
<<      <body>
<<      </body>
<<    </html>
  };
};
#--- End of File ---

今回の変更は、xfy/xvcd を短く書く為のものでは無いですね。
次回は、include の仕組みを導入したいです。
単なる include ではなく、共通利用できるコード断片を パラメータ置換しながら
取り込む様にする予定です。

ピックアップ:「この記事に言及しているブログ記事一覧」, Second Lifeの収入とビジネスモデル, etc...

- http://d.hatena.ne.jp/t_yano/20070612/1181666761
> > 矢野勉のはてな日記 - Mac用Safari 3 betaはSafari Standと非互換です

- http://chalow.net/2007-06-13-1.html
> > [を] レビューポスターで「この記事に言及しているブログ記事一覧」等を表示

- http://internet.watch.impress.co.jp/cda/news/2007/06/13/16023.html
> > 米AOLのオンラインストレージ「XDrive」が無料でAPIを公開

- http://www.chikawatanabe.com/blog/2007/06/second_life.html
> > On Off and Beyond: Second Lifeの収入とビジネスモデル

- http://www.itmedia.co.jp/enterprise/articles/0706/13/news012.html
> > ITmedia エンタープライズ:今日から開幕! Interop Tokyo 2007のインフラはこうして作られた

- http://canny.sourceforge.net/
> > Canny template library - Smarty for Ruby

- http://wizardbible.org/34/34.txt
> > Wizard Bible vol.34 (2007,6,12)

- http://cappuccino.jp/keisuken/logbook/20070612.html#p08
> >  [Java][Ruby] JRubyはthread safeでない? - 航海日誌 (2007-06-12)

- http://youmos.com/news/helpbaloon_js
> > Ajax対応のバルーン表示するJavaScript (HelpBalloon.js) - youmos

- http://gigazine.net/index.php?/news/comments/20070613_iwp2007/
> > 日本人が利用している動画投稿サイトは「YouTube」が93.3%で1位 - GIGAZINE

« 2007年6月13日 | トップページ | 2007年6月15日 »

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 あわせて読みたい

リンク