Java 8 грамматика имеет часть, которая вызывает синтаксическую ошибку при использовании в реальной программе - PullRequest
0 голосов
/ 18 апреля 2020

Итак, я проходил грамматику Java 8 и обнаружил следующие произведения для определенных нетерминалов:

MultiplicativeExpression:
UnaryExpression 
MultiplicativeExpression * UnaryExpression 
MultiplicativeExpression / UnaryExpression 
MultiplicativeExpression % UnaryExpression

UnaryExpression:
UnaryExpressionNotPlusMinus

UnaryExpressionNotPlusMinus:
PostfixExpression 

PostfixExpression:
Primary 

Primary:
ArrayCreationExpression

ArrayCreationExpression:
new PrimitiveType DimExprs [Dims] 

Обратите внимание, что я не перечислил все произведения для нетерминалов, которые появиться здесь. Я перечислил только те из них, которые я собираюсь использовать для создания оператора с синтаксической ошибкой в ​​Java.

Итак, я использую производную для ArrayCreationExpression , чтобы получить new int[3][][] Затем это значение уменьшается до Primary , которое затем уменьшается до PostfixExpression и так далее, пока создание массива не будет окончательно уменьшено до UnaryExpression . Используется для получения MultiplicativeExpression следующего вида:

3 * new int[3][][]

Используется для формирования конструкции, которая сводится к нетерминальному Назначение (чьи произведения я здесь не перечислил). Эта конструкция: `` `num = 3 * new int [3] [] []` `

Теперь при компиляции следующего Java кода:

import java.util.Scanner;
public class JavaExample 
{
    public static void main(String[] args) 
    {
        int num3;
        num3 = 5 * new int[3][][];
    }
}

дает следующая ошибка:

prog.java:7: error: bad operand types for binary operator '*'
        num3 = 5 * new int[3][][];
                 ^
  first type:  int

Как код, сгенерированный с использованием Java грамматики, может дать синтаксическую ошибку при компиляции?

Java 8 грамматика: https://docs.oracle.com/javase/specs/jls/se8/html/jls-19.html

Правила, которые я здесь использовал, перечислены под заголовком Произведения из §15 (выражения)

...