1

だから、私はパーサーがどのようなものになるのか疑問に思っていました:

line        :   expression EOF;
expression  :   m_expression (PLUS m_expression)?;
m_expression:   basic (TIMES basic)?;
basic       :   NUMBER | VARIABLE | (OPENING expression CLOSING) | expression;

再帰的で無効なままですが、パーサーは

line        :   expression EOF;
expression  :   m_expression (PLUS m_expression)?;
m_expression:   basic (TIMES basic)?;
basic       :   NUMBER | VARIABLE | (OPENING expression CLOSING);

「基本」の定義がまだ「式」を参照している場合でも、有効で機能します。特に、次の形式で式を解析できるようにしたいと考えています。

a+b+c

2つ以上のオペランドに作用する操作を導入することなく。

4

1 に答える 1

1

行呼び出し 式呼び出し m_expression 呼び出し 式を呼び出す基本... これは、間接的に再帰的に残され、v3 antlr と v4 の両方にとって悪いことです。左再帰の定義は、トークンを消費せずに同じルールに戻ることができることを意味します。2 番目のインスタンスでは、expression の前に OPENING トークンがあります。

于 2013-10-08T22:27:57.627 に答える