image

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

検索

最近のトラックバック

無料ブログはココログ

« ピックアップ:「この記事に言及しているブログ記事一覧」, Second Lifeの収入とビジネスモデル, etc... | トップページ | ピックアップ:Ruby 会議 2007の動画, Viper 2 Open Betaはもうすぐ, etc... »

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... | トップページ | ピックアップ:Ruby 会議 2007の動画, Viper 2 Open Betaはもうすぐ, etc... »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/184434/15427322

この記事へのトラックバック一覧です: racc で xvcd を生成することを試し始めた (その6):

« ピックアップ:「この記事に言及しているブログ記事一覧」, Second Lifeの収入とビジネスモデル, etc... | トップページ | ピックアップ:Ruby 会議 2007の動画, Viper 2 Open Betaはもうすぐ, etc... »

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

リンク