Синтаксический анализ методом рекурсивного спуска - от LL (1)

 /* Unchanged JS */ function animateIt(t){var e=document.getElementById(t),n=0,a=setInterval(function(){n<100?(e.style.left=e.style.top=n+"px",n++):clearInterval(a)},10)}animateIt("box1");
/*
 * For the `top` and `left` property to work, your element needs
 * to have a `position: relative` or `absolute` or `fixed`
 */
#box1 { position: relative; }
 
First Box

Больше информации здесь: https://developer.mozilla.org/en-US / документы / Web / CSS / топ

8
задан Vertexwahn 4 March 2016 в 16:10
поделиться

3 ответа

Проблема с

<command>   :=  <expr>
            |   <id> = <expr>

это, когда Вы "видите" <id> Вы не можете сказать, является ли это начало assignement (второе правило), или это"<factor>". Вы будете только знать при чтении следующего маркера.

AFAIK ANTLR является LL (*) (и также может генерировать синтаксические анализаторы пакета крысы, если я не ошибаюсь), таким образом, он, вероятно, обработает этот grammare рассмотрение двух маркеров сразу.

Если бы можно играть с грамматикой, я предложил бы любому, добавляет ключевое слово для присвоения (например. let x = 8) :

<command>   :=  <expr>
            |   "let" <id> "=" <expr>

или используйте = показать оценку:

<command>   :=  "=" <expr>
            |   <id> "=" <expr>
6
ответ дан 5 December 2019 в 12:15
поделиться

Проблема состоит в том что грамматика:


<command>   :=  <expr>
            |   <id> = <expr>

не взаимно-рекурсивная-процедура. Для рекурсивного достойного синтаксического анализатора необходимо будет определить нерекурсивный эквивалент.

шоу сообщения rdentato, как зафиксировать это, приняв Вас, могут играть с грамматикой. Этот powerpoint обстоятельно объясняет проблему в немного большем количестве деталей и показывает, как исправить его: http://www.google.com/url?sa=t&source=web&ct=res&cd=7&url=http%3A%2F%2Fxml.cs.nccu.edu.tw%2Fcourses%2Fcompiler%2Fcp2006%2Fslides%2Flec3-Parsing%26TopDownParsing.ppt&ei=-YLaSPrWGaPwhAK5ydCqBQ&usg=AFQjCNGAFrODJxoxkgJEwDMQ8A8594vn0Q&sig2=nlYKQVfakmqy_57137XzrQ

2
ответ дан 5 December 2019 в 12:15
поделиться

ANTLR 3 использует "LL (*)" синтаксический анализатор в противоположность LL (k) синтаксический анализатор, таким образом, он будет смотреть вперед, пока он не достигнет конца входа, если он имеет к, без отслеживания в обратном порядке, с помощью специально оптимизированных конечных автоматов determinstic (DFA).

1
ответ дан 5 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: