X



新作言語のEBNFを書いていくスレ
0001デフォルトの名無しさん
垢版 |
2021/12/23(木) 04:14:23.80ID:Xd/JFvMa
文法はWikiを見てね↓
https://ja.wikipedia.org/wiki/EBNF

↓は四則演算の実装

program = expr ;
expr = term , [ add sub op , term ] ;
term = factor , [ mul div op , factor ] ;
factor = number | "(" expr ")" ;
number = [ "-" ] , digit , [ { digit } ] ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
add sub op = "+" | "-" ;
mul div op = "*" | "/" ;
0006デフォルトの名無しさん
垢版 |
2021/12/27(月) 18:14:40.87ID:khBGPOzg
<Exp> ::= <Const> | <Var> | <Form>

<Form> ::= <If> | <Lambda> | <Apply> | <Let> | <Letrec>

<If> ::= "[" IF "," <Exp> "," <Exp> "," <Exp> "]"

<Lambda> ::= "[" LAMBDA "," "[" <Var1> "," ... "," <VarN> "]" "," <Exp> "]" /* N >= 1 */

<Apply> ::= "[" <Exp1> "," ... "," <ExpN> "]" /* N >= 2 */

<Let> ::= "[" LET "," <Exp> "," <Bind1> "," ... "," <BindN> "]" /* N >= 0 */
<Bind> ::= "[" <Var> "," <Exp> "]"

<Letrec> ::= "[" LETREC "," <Exp> "," "[" <RecBind1> "," ... "," <RecBindN> "]" "]" /* N >= 0 */
<RecBind> ::= "[" <Var> "|" <Lambda> "]"
00076
垢版 |
2021/12/27(月) 18:45:41.62ID:khBGPOzg
>>5 の例として、階乗(FACT)と最大公約数(GCD)

[LETREC, [@fact, 4],
  [@fact, LAMBDA, [@x],
    [IF, [LE, @x, 1],
      1,
      [MUL, @x, [@fact, [SUB, @x, 1]]]]]] ;

[LETREC, [@gcd, 16, 28],
  [@gcd, LAMBDA, [@a, @b],
    [IF, [EQ, @b, 0],
      @a,
      [@gcd, @b, [MOD, @a, @b]]]]]
レスを投稿する


ニューススポーツなんでも実況