Skip to content
elipmoc edited this page Sep 30, 2017 · 3 revisions
 //拡張BNF記法
        // []は 0回か1回を表し
        //  {}を0回以上の繰り返し
        // +を1回以上の繰り返しとする

        文
            : 式 || 変数宣言
            ;

        変数宣言
            : [型指定子3],識別子,"=",式
            ;

        式
            :キャスト
            ;

        キャスト
            : ( "(" , 型種類 , ")", キャスト )|| let_in
            ;

        let_in
            :("let" , 変数宣言,{ "," , 変数宣言}, "in" ,式) || 条件演算子
            ;

        条件演算子 
            :等しい演算子,["?",式,":",式]
            ;

        等しい演算子
            :足し算 , {( "==" || "<=" || ">=" || "<" || ">" || "!=" ),足し算}
            ;

        足し算
            : 項 , { "+" || "-" , 項 }
            ;

        項
            :[-] , ラムダ呼び出し { "*" || "/", ラムダ呼び出し }
            ;

        ラムダ呼び出し
            :因子,{"(",引数,")"}
            ;

        因子
            : 整数|| 実数 ||文字 || 文字列 || リスト || 組み込み関数呼び出し || グローバル変数|| ローカル変数 || ラムダ定義 ||( "(" , 式 , ")" )
            ;

        文字
            : "'" , 任意の一文字 , "'"
            ;

        文字列
            : " " ", 任意の文字列 , " " "
            ;

        
        リスト
            : "[" , リスト中身 ,"]"
            ;
        
        リスト中身
            : 式 , { "," , 式}
            ;


        ラムダ定義
            :"(",引数定義,")","{",式,"}"
            ;

        組み込み関数呼び出し
            :識別子,"(",引数,")"
            ;
       
        グローバル変数 とローカル変数
            :識別子
            ;

        識別子
            :(a-z)+
            ;

        引数
            :[式 , {"," , 式}]
            ;

        引数定義
            :[識別子 , {"," , 識別子}]
            ;

        型指定子3
            :型指定子 , "::"
            ; 
           
        型指定子2
            :( 型種類 | "[", 型指定子 , "]" ) ,{ "[" , "]" }
            ;

        型指定子
            :型指定子2 | , {"->",型指定子2}
            ;

        型種類
            :"double" | "void"|"bool"|"char"|"int"|"unit"
            ;

Clone this wiki locally