Итак, я разрабатываю переводчик как язык в качестве проекта. Принятые программы могут состоять из нуля или более деклараций, за которыми следуют ноль или более операторов. Я называю другую (рекурсивную) процедуру для обработки обеих этих возможностей, каждая из которых возвращает либо True после завершения, либо False при ошибке.Python синтаксический ввод как интерпретатор
Декларации можно отличить от утверждений в том, что объявления всегда начинаются с нетерминального «типа» (который сам по себе является другой процедурой, которая возвращает True of False).
Так что мой вопрос заключается в следующем. Мне нужно проверить обе ошибки и когда декларации в начале входного файла закончены. Ниже приведен фрагмент из верхнего слоя, который будет проверять для деклараций и заявлений:
while self.declaration():
#Do stuff
while self.statement():
#Do stuff
Так как вы рекурсивно двигаться вниз эти вызовы функций, то в конечном итоге возвращается Истина или Ложь на основе, имеет ли ваш код любые ошибки. Но в то же время мне нужно иметь возможность проверять, нет ли больше деклараций, которые будут перемещаться из цикла declaration() в цикл statement().
Другими словами, в первом цикле код будет возвращать False как при обнаружении ошибки, так и при завершении деклараций. Как это исправить?
ПРИМЕЧАНИЕ. Обе функции перемещают индекс (который извлекает отдельные ключевые слова из кода) вперед в программе, то есть я не могу вызывать дополнительные проверки, чтобы определить, следующий ли тип.
Возможно, я мог читать вперед (используя этот индекс) до начала анализатора и подсчитывать количество деклараций в коде, а затем вызывать объявление() для числа обнаруженных мной объявлений. Может ли кто-нибудь подумать о лучшем решении? Спасибо за вашу помощь.
Вот образец правового кодекса (игнорирование, будет ли или нет переменные содержат ничего полезного):
int c ? #Declaration
if (foo < 3) {
a is 7 ?
}
Вот пример нелегального кода:
if (foo < 3) {
array int [ 3 ] a ? #Declaration
}
int c ? #Declaration
Суть в том, какие заявления которые сделаны в принятой программе, должны предшествовать всем остальным заявлениям.
Возможно, вы могли бы разместить образец своего языка, в том числе декларации и заявления? –