2016-08-14 4 views
1

Я работаю над синтаксическим анализатором с повышающим духом x3. Я закончил грамматику и синтаксический анализатор, как и ожидалось. Теперь я хочу добавить обработку ошибок, поэтому мне нужно добавить точки ожидания к моей грамматике. Вопрос в том, когда именно я могу использовать оператор ожидания > вместо оператора «затем» >>? Могу я использовать его только как a > b, если a >> b никогда не происходит в другой части грамматики?Когда я могу использовать оператор ожидания?

ответ

6

Оператор ожидания по существу отключает отслеживание обратной связи. Если b должно всегда следовать a, самое время использовать точку ожидания: >. Если есть некоторая комбинация логики, которая может привести к a, а затем что-то еще, вы не должны использовать ожидание, а вместо этого >>.

Если у вас есть альтернативы в вашей грамматике, вы захотите обратить особое внимание на то, что вы не победили действительные задние треки.

Например, если вы пишете язык анализатор, который требует условного выражения, если заявление, чтобы быть в скобках, действительная грамматика может включать в себя:

if_statement = lit("if") > '(' > statement > ')';

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

(Примечание. Реальность такова, что грамматика является немного более сложным, чем для if быть ключевым словом, он не может просто соответствовать какому-то маркеру, который начинается с буквой я и е)

Вы можете используйте a > b в своей грамматике, если вы знаете, что в этом правиле встречается a, за которым всегда следует b. У вас может быть a >> b где-то еще в общей грамматике.

+0

Стоит отметить, что смешивание '>' и '>>' может усложнить автоматическое распространение и преобразование атрибутов совсем немного (по отношению к буквальному вопросу _ «Когда я могу использовать оператор ожидания?» _). Проблема состоит в том, что 'vector3 ' может стать, например, 'vector2 , double>' в таких случаях – sehe

+1

@sehe У меня нет большого опыта работы с X3, и, к сожалению, я не могу сказать точно, но, похоже, я помню, что Джоэл де Гузман сказал, что эта проблема, которая дал много головных болей в Ци, уже решена в X3. PS: [Найдена ссылка на заявление] (http://boost.2283326.n4.nabble.com/Unexpected-behavior-using-versus-tp4662087p4662153.html). – llonesmiz