2015-10-31 7 views
0

This is where the term "non-LR(0) reduce state Как понять, не LR (0) уменьшить состояние в практичном способе построения эффективного парсеры LALR (к) с автоматическим Error Recovery

Я не понимает, где не-LR (0) уменьшить состояние приходит из. ли это означает, что:

  1. Удалите LR (0) уменьшить состояние И получить LR '(0) состояний
  2. Использование LR' (0) говорится, чтобы генерировать LR (K) состояний. и состояние не LR (0) уменьшается из состояний LR (K).

Это копия A patyical method for cnstructing efficient LALR(K) Parders with Authomatic Error Recovery

Пожалуйста, прочтите главу 4.2

ответ

0

свертка состояние является состоянием, в котором возможно сокращение. То есть, если в наборе предметов состояния содержится последний элемент, состояние является сокращенным.

Если состояние сокращения является LR (0) - это означает, что действие состояния можно идентифицировать без какого-либо вида - тогда набор предметов состояния должен быть только одним элементом, который должен быть окончательным. (Если бы это было не так, состояние не могло бы быть LR (0), потому что было бы доступно более одного возможного действия, которое можно было бы отличить только от просмотра.)

Как он указывает, LR (0) сокращение действия должно быть правильным, поскольку в этом состоянии не было никаких других действий. Таким образом, даже если маркерная записка генерирует ошибку, требующую восстановления ошибок, сокращение не нужно отменять. Таким образом, автор предлагает удалить LR (0) сокращения состояний.

Конечно, не все состояния LR (0). В большинстве состояний действие будет зависеть от взгляда. В частности, в состоянии сокращения, отличном от LR (0), уменьшение будет зависеть от токена. И, после того как LR (0) уменьшают состояния, удаляются, все Остальные состояния сокращения не являются LR (0).

Но поскольку сжатие таблицы может заменить действие с ошибкой по умолчанию (и, я думаю, из-за слияния состояния LALR, хотя возможно, что эта глава не относится к LALR), вполне возможно, что указанное сокращение так как токен будет выглядеть неверно. В этом случае сокращение может быть отменено для восстановления после ошибки.

Похоже, что допущение автора состоит в том, что отказ от сокращения не является, как правило, возможным, и поэтому парсеру необходимо отложить действия по сокращению (включая модификацию стека) до тех пор, пока известно, что сокращения определенно не являются достоверными, что будет когда парсер в конце концов выполняет сдвиг. Остальная часть главы касается достижения этой цели.

+0

спасибо! – kuafuking