«Правила» о допустимых структурах обычно называются «статической семантикой».Для обработки таких правил обычно требуется:
- Абстрактное синтаксическое дерево программы и тех сущностей, на которые она ссылается (например, другие программы, классы и т. Д.)
- Таблица символов, которая связана с каждым идентификатором, объявление, относящееся к этому идентификатору, и ключевая информация, связанная с этим объявлением, обычно называемая «типом»
- Способность вычислять тип каждого составного фрагмента текста.(например, выражения)
С помощью этой информации вы реализуете практически всю статическую семантику.Например, «класс не может быть как окончательным, так и абстрактным», требует, чтобы символ для класса был связан со свойствами final и abstract, чтобы ваш синтаксический анализатор / символ выполнял эту связь, когда он встречает объявления, и чтобы вы фактически сканировалиЗаписи таблицы символов после того, как они все построены, и проверьте, чтобы оба свойства не присутствовали одновременно.(Вы можете реализовать это другими способами, но чистый эффект тот же).
Можно проверить некоторые вещи без всего этого механизма, если они случайно оказываются на вашем языке, «рядом» с каждымДругой.Я не эксперт по Java, но если «abstract» и «final» должны быть объявлены для одного и того же удаления класса, вы можете взломать проверку, которая запрещает эти ключевые слова рядом с ключевым словом «class», но это простобыть взломанным и не будет надежным при любых обстоятельствах.
Вы подразумеваете, что пишете (полный) Java-компилятор, говоря «ваш компилятор» и «У меня есть правила (которые должны быть обнаружены)».Вам нужно будет собрать все вышеперечисленное или просто принять чью-либо еще законченную версию всего этого.Вы обнаружите, что создание всех этих элементов не легко для людей, которые знакомы с ними, потому что современные языки, такие как Java, имеют очень сложные грамматики, правила области видимости и системы типов.
Учитывая, что вы, кажется, не знакомы с необходимостью в них и еще даже не пытались построить AST, я думаю, что ваши надежды на получение результата в ближайшей перспективе не очень хороши.Я предлагаю вам пересмотреть свои цели;если вы студент, прежде чем начать, вам нужно больше знаний.