LoginSignup
1
1

More than 3 years have passed since last update.

「文言」公式引越し&言語仕様書追加

Last updated at Posted at 2020-01-12

公式が引越しになりました

CHANGELOGによると

New Website Domain https://wy-lang.org!

We are now using Netlify to build our website & IDE. The legacy links will redirect to https://wy-lang.org automatically.

という事ですので、しばらくは自動的にリダイレクトされるようです
また、公式の下部に言語仕様へのリンクが追加されています
Screen Shot 2020-01-11 at 22.20.08.png

wenyan-spec
Wenyan Language Specification

grammar wenyan;
program                     : statement* ;
statement                   : declare_statement
                            | define_statement
                            | print_statement 
                            | for_statement
                            | function_statement
                            | if_statement
                            | return_statement
                            | math_statement
                            | assign_statement
                            | import_statement
                            | object_statement
                            | reference_statement
                            | array_statement
                            | flush_statement 
                            | BREAK
                            | comment;
reference_statement         : '夫' data ('之' (STRING_LITERAL|INT_NUM|'其餘'|IDENTIFIER|'長'))? name_single_statement? ;
array_statement             : array_cat_statement|array_push_statement ;
array_cat_statement         : '銜' (IDENTIFIER|'其') (PREPOSITION_RIGHT IDENTIFIER)+ name_single_statement?;
array_push_statement        : '充' (IDENTIFIER|'其') (PREPOSITION_RIGHT data)+ name_single_statement?;
function_statement          : function_define_statement|(function_call_statement (name_single_statement)?) ;
function_call_statement     : function_pre_call|function_post_call ;
function_pre_call           : ('施' IDENTIFIER (preposition data)*)|('施其' (preposition data)*) ;
function_post_call          : ('取' INT_NUM '以施' IDENTIFIER)+ ;
function_define_statement   : '吾有' INT_NUM '術' name_single_statement ('欲行是術' '必先得' (INT_NUM TYPE ('曰' IDENTIFIER)+)+)? ('是術曰'|'乃行是術曰') statement* '是謂' IDENTIFIER '之術也' ;
if_statement                : IF if_expression '者' statement+ (ELSE statement+)? FOR_IF_END ;
if_expression               : unary_if_expression|binary_if_expression ;
unary_if_expression         : data|(IDENTIFIER '之'('長'|STRING_LITERAL|IDENTIFIER))|'其' ;
binary_if_expression        : unary_if_expression IF_LOGIC_OP unary_if_expression ;
declare_statement           : ('吾有'|'今有') INT_NUM TYPE ('曰' data)*;
define_statement            : (declare_statement name_multi_statement)|init_define_statement ;
name_multi_statement        : '名之' ('曰' IDENTIFIER)+ ;
name_single_statement       : '名之' ('曰' IDENTIFIER) ;
init_define_statement       : '有' TYPE data (name_single_statement)? ;
for_statement               : for_arr_statement
                            | for_enum_statement
                            | for_while_statement ;
for_arr_statement           : FOR_START_ARR   IDENTIFIER            FOR_MID_ARR  IDENTIFIER statement* FOR_IF_END ; 
for_enum_statement          : FOR_START_ENUM  (INT_NUM|IDENTIFIER)  FOR_MID_ENUM statement* FOR_IF_END ;
for_while_statement         : FOR_START_WHILE statement*            FOR_IF_END ;
math_statement              : (arith_math_statement|boolean_algebra_statement|mod_math_statement) (name_multi_statement)? ;
arith_math_statement        : arith_binary_math|arith_unary_math ;
arith_binary_math           : ARITH_BINARY_OP (data|'其') preposition (data|'其') ;
arith_unary_math            : UNARY_OP (IDENTIFIER|'其') ;
mod_math_statement          : '除' (INT_NUM|FLOAT_NUM|IDENTIFIER|'其') preposition (INT_NUM|FLOAT_NUM|IDENTIFIER) POST_MOD_MATH_OP? ;
boolean_algebra_statement   : '夫' IDENTIFIER IDENTIFIER LOGIC_BINARY_OP ;
assign_statement            : '昔之' IDENTIFIER ('之' (INT_NUM|STRING_LITERAL|IDENTIFIER))? '者' (('今' ((data ('之' INT_NUM)?)|'其') '是矣')|'今不復存矣') ;
return_statement            : '乃得' (data|'其')|'乃歸空無'|'乃得矣' ;
import_statement            : '吾嘗觀' STRING_LITERAL '之書' ('方悟' IDENTIFIER+ '之義')? ;
object_statement            : '吾有' INT_NUM '物' name_multi_statement (object_define_statement)? ;
object_define_statement     : '其物如是' ('物之' STRING_LITERAL '者' TYPE '曰' data)+ '是謂' IDENTIFIER '之物也' ;
data                        : STRING_LITERAL|BOOL_VALUE|IDENTIFIER|INT_NUM|FLOAT_NUM ;
STRING_LITERAL              : '「「' ( ~('」') )* '」」' ;
IDENTIFIER                  : '「' ( ~('」') )+ '」' ;
ARITH_BINARY_OP             : '加'|'減'|'乘' ;
LOGIC_BINARY_OP             : '中有陽乎'|'中無陰乎' ;
POST_MOD_MATH_OP            : '所餘幾何' ;
UNARY_OP                    : '變' ;
preposition                 : PREPOSITION_LEFT|PREPOSITION_RIGHT ;
PREPOSITION_LEFT            : '於' ;
PREPOSITION_RIGHT           : '以' ;
IF                          : '若' ;
ELSE                        : '若非' ;
IF_LOGIC_OP                 : '等於'|'不等於'|'不大於'|'不小於'|'大於'|'小於' ;
FOR_START_ARR               : '凡' ;
FOR_START_ENUM              : '為是' ;
FOR_START_WHILE             : '恆為是' ;
FOR_MID_ARR                 : '中之' ;
FOR_MID_ENUM                : '遍' ;
FOR_IF_END                  : '云云'|'也' ;
FLOAT_NUM                   : INT_NUM '又' (INT_NUM FLOAT_NUM_KEYWORDS)+ ;
FLOAT_NUM_KEYWORDS          : '分'|'釐'|'毫'|'絲'|'忽'|'微'|'塵'|'埃'|'渺'|'漠' ;
INT_NUM                     : INT_NUM_KEYWORDS+ ;
INT_NUM_KEYWORDS            : '零'|'一'|'二'|'三'|'四'|'五'|'六'|'七'|'八'|'九'|'十'|'百'|'千'|'萬'|'億'|'兆'|'京'|'垓'|'秭'|'穣'|'溝'|'澗'|'正'|'載'|'極' ;
TYPE                        : '數'|'列'|'言'|'爻' ;
BOOL_VALUE                  : '陰'|'陽' ;
print_statement             : '書之' ;
WS                          : ([ \t\r\n]|'。'|'、')+ -> skip ;
comment                     : ('注曰'|'疏曰'|'批曰') STRING_LITERAL ;
flush_statement             : '噫' ;
BREAK                       : '乃止' ;

これはEBNFでしょうかANTLR4のようです

言語仕様に変更があれば共に育っていくのですね
ワクワクします

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1