1

私は PEGjs 文法を学んでおり、次のヘルプまたはガイドをリクエストしています。

私は次のような機能を持っていますPRODUCT(), SUM(), DIVIDE()

PRODUCT は number /PRODUCT()/SUM()/DIVIDE() をパラメーターとして使用できます (カンマで区切られた任意の数字)

ex: PRODUCT(2, 5, SUM(5, 6, 7), DIVIDE(5, 2), PRODUCT(4, 6, 20, 12))

同じように、SUM はコンマで区切られた任意の数のパラメーターを取ることができます。

Ex: SUM(4, 5, 10, DIVIDE(SUM(2, 5, 6), 3))

DIVIDE は 2 つのパラメーター (2 つが必須)、数値または別の関数を取ります

Ex: DIVIDE(3, PRODUCT(3, 4, SUM(2, 3)))

どうすれば達成できるか教えてくれますか?

今までのルール

start = sum
  /multiply

multiply = "PRODUCT("a:digit "," __ b:digit ")" {return a * b}

sum = "SUM("a:digit "," b:digit ")"  {return a + b}

digit = [0-9]

__ = WhiteSpace*

WhiteSpace "whitespace"
  = [ \t\r\n]

上記のルールは、2 つの数値の積/合計のみをサポートします。上記を達成するにはどうすればよいですか?

前もって感謝します Manjunath Reddy

4

2 に答える 2

1

一般に、次のような制限のないリストを解析したい場合

1, 2, 3, 4

次のように再帰ルールを作成できます。

args = head:Integer rest:(_ "," _ r:args{ return r; })? {
    return rest != null ? [head].concat(rest) : [head];
}

Integer = [0-9]+ { return parseInt(text(), 10); }

_ = [ \t\n\r]*
于 2015-11-26T16:06:28.530 に答える