2015-04-04 3 views
2

В грамматиках (например, LL (1)), обозначает обозначенный символ. На практике я не понимаю, что это за символ. Чтобы понять, мне нужен простой и практичный пример.Что такое символ взгляда?

+0

Такой взгляд - это символ, который интерпретируется некоторыми командами как «команда». Это позволяет заглядывать вперед, чтобы читать и оценивать часть входного потока без фактической пересылки местоположения потока_. В качестве эффекта следующая операция чтения будет считывать одну и ту же последовательность. Преимущество: вы можете заранее увидеть, что вы должны ожидать от ввода. К сожалению, в настоящее время нет примера ... – arkascha

+0

Похож на вопрос для [Programmer's StackExchange] (http://programmers.stackexchange.com/) –

ответ

4

LL (1) грамматик поможет вам решить сразу, какое правило грамматики вы будете использовать. Этот однозначный токен означает, что вам нужно прочитать только следующий символ из текущего символа, который вы читаете.

LL (1) grammars поможет вам уменьшить сложность до O(n) и не будет возвращать данные при разборе ввода.

Wikipedia Example

Пусть % быть символ, который вы читаете, а строка ввода быть (a + a)

LL (1) грамматикой:

S -> F (Rule1) 

S -> (S + F) (Rule2) 

F -> a (Rule3) 

Синтаксический Таблица является:

( ) a + $ 
S 2 - 1 - - 
F - - 3 - - 

Тогда у вас есть:

%(a + a) (прочитать начало строки и опережения является (так решили применить Rule2 в соответствии с синтаксического анализа таблицы)

Абстрактный синтаксис дерева теперь:

  S 
     // | \ \ 
     ( S + F ) 

Затем вы потребляете (. И вы продолжаете то же самое.

Шаг 2:

  S 
     // | \ \ 
     ( S + F ) 
      | 
      F 
      | 
      a 

Шаг 3:

  S 
     // | \ \ 
     ( S + F ) 
      | | 
      F a 
      | 
      a 

Вы можете увидеть пример Википедии, которая использует стек, вместо абстрактного синтаксического дерева в точно таким же образом.

+2

Nitpick: блок lookahead - это токены, а не символы. Маркер может состоять из более чем одного символа. –

Смежные вопросы