自从做好了
Vczh Free Script之后,对于λ-calculus的热情还在,对于未实现lazy evaluation也耿耿于怀。因此又设计了一门类似Haskell的语言来(在语法上模仿了不少),本意是既能享受到lazy evaluation所带来的优美的表现形式,又能将这门语言当脚本而不是单纯的程序语言使用。不过将来会演变成什么就暂时不管了。现在贴出该语言的语法的形式描述,做备忘录之用,或有恳请同行斧正之意。
LAZY_PROGRAM is
    MODULE_DECLARATION
 
--------------------------------------
 
MODULE_DECLARATION is
    module MODULE_NAME exports {FUNCTION_NAME}+ where {DECLARATION}+ end;
 
DECLARATION is
    MODULE_DECLARATION
    IMPORT_DECLARATION
    TYPE_DECLARATION
    CLASS_DECLARATION
    INSTANE_DECLARATION
    FUNCTION_HEAD_DECLARATION
    FUNCTION_BODY_DECLARATION
 
--------------------------------------
 
IMPORT_DECLARATION is
    import MODULE_NAME{.MODULE_NAME};
 
--------------------------------------
 
TYPE_DECLARATION is
    type TYPE_NAME {TYPE_NAME}[= TYPE_DESCRIPTION];
 
SIMPLE_TYPE_DESCRIPTION is
    "(" TYPE_DESCRIPTION ")"
    TYPE_NAME
 
TYPE_DESCRIPTION is
    "(" TYPE_DESCRPTION ")"
    TYPE_NAME {SIMPLE_DESCRIPTION}
    TYPE_CONSTRUCTOR {SIMPLE_TYPE_DESCRIPTION}+
    TYPE_DESCRIPTION -> TYPE_DESCRIPTION
    TYPE_DESCRIPTION "|" TYPE_DESCRIPTION
 
--------------------------------------
 
CLASS_DECLARATION is
    class CLASS_NAME TYPE_NAME [inherits {CLASS_NAME}+] where {FUNCTION_HEAD_DECLARATION|FUNCTION_BODY_DECLARATION}+ end;
 
--------------------------------------
 
INSTANCE_DECLARATION is
    instance CLASS_NAME TYPE_NAME [where {FUNCTION_BODY_DECLARATION}+ end];
 
--------------------------------------
 
FUNCTION_HEAD_DECLARATION is
    FUNCTION_NAME :: {PREREQUISITE,}TYPE_DESCRIPTION;
 
PREREQUISITE is
    [CLASS_NAME] TYPE_NAME
 
FUNCTION_BODY_DECLARATION is
    FUNCTION_NAME {LEFT_VALUE} = (EXPRESSION | linking <string>);
 
--------------------------------------
 
LEFT_VALUE is
    VALUE_NAME
    LEFT_VALUE:VALUE_NAME
    "(" LEFT_VALUE{,LEFT_VALUE} ")"
    "[" [LEFT_VALUE{,LEFT_VALUE}] "]"
    TYPE_CONSTRUCTOR {LEFT_VALUE}+
    "(" LEFT_VALUE ")"
 
EXPRESSION is
    VALUE
    VALUE_NAME
    EXPRESSION:EXPRESSION
    "(" EXPRESSION{,EXPRESSION} ")"
    "[" [EXPRESSION{,EXPRESSION}] "]"
    TYPE_CONSTRUCTOR {EXPRESSION}+
    EXPRESSION EXPRESSION
    "(" OPERATOR_NAME EXPRESSION ")"
    "(" EXPRESSION OPERATOR_NAME ")"
    FUNCTION_NAME
    EXPRESSION OPERATOR EXPRESSION
    "[" EXPRESSION "|" [[LEFT_VALUE <- ]EXPRESSION{,[LEFT_VALUE <- ]EXPRESSION}] "]"
    case EXPRESSION of {LEFT_VALUE:EXPRESSION}+ end
    do {([LEFT_VALUE = ]EXPRESSION | LEFT_VALUE::TYPE_DESCRIPTION);}+ end
    EXPRESSION [where {FUNCTION_HEAD_DECLARATION | FUNCTION_BODY_DECLARATION}+ end]
    \{LEFT_VALUE}+ -> "(" EXPRESSION ")"
 
--------------------------------------
 
MODULE_NAME is
    <identifier>
 
FUNCTION_NAME is
    <identifier>
    "(" OPERATOR ")"
 
TYPE_NAME is
    <identifier>
 
TYPE_CONSTRUCTOR is
    <identifier>
 
CLASS_NAME is
    <identifier>
 
VALUE_NAME is
    <identifier>
 
VALUE is
    <identifier>
    <constant>
 
OPERATOR_NAME is
    "(" OPERATOR ")"
    $ <identifier> $
 
OPERATOR is
    +
    -
    *
    /
    \
    %
    &&
    ||
    ^
    !
    <
    >
    <=
    >=
    ==
    !=
    >>=
    >>
    !!
	posted on 2008-04-20 20:49 
陈梓瀚(vczh) 阅读(2846) 
评论(3)  编辑 收藏 引用  所属分类: 
Vczh Lazy Script