2016-12-02 12 views
2

Это мой код мне нужно разобрать в AST:Как разобрать отступ управляемого кода в AST

one 
two 
    three 
    four 
five 
six 
    seven 

Это отступы привода, как вы видите. Я не могу найти способ объяснить свой синтаксический анализатор (я использую Antlr4), что ведущее пространство является индикатором под-уровня.

+1

Клянусь, это дубликат. –

+1

@ yegor256 Я обновил ответ, с которым я связался с примером ANTLR4. –

ответ

3

В принципе, вы не можете объяснить это парсеру без какой-либо помощи лексера.

Вместо этого вы пытаетесь взломать лексер, чтобы отслеживать количество пробелов, которые запускают строку, когда она просматривает пробелы. Если количество пробелов изменяется от предыдущей строки, лексер испускает токен. Если подсчет увеличивается, испустите токен INDENT. Если счетчик падает, испустите токен DEDENT.

Теперь вы можете добавить токены INDENT и DEDENT в правила парсера. Они действуют логически, как {и} в C-подобных языках.

+0

Вот что я подумал. Можете ли вы показать, как именно будет выглядеть «взломать лексер». Может быть, укажите мне правильное сообщение в блоге или страницу документации? – yegor256

+0

Здесь я не могу вам помочь; Я не эксперт ANTLR. (Это хак, который мы сделали для нашего парсера Python с нашим своеобразным лексером, но это довольно стандартный трюк). Вам нужно вникнуть в подробности написания лексира ANTLR. –

+0

Привет @ yegor256 была ли ваша проблема решена? Вы можете посмотреть на грамматику, написанную на Python3, сгенерированную лексеру, или просто взглянуть на часть элементов lexer для грамматик Python3. Это может быть даже простая программа Python для обработки INDENT/DEDENT и испускать токен при встрече. –

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

  • Нет связанных вопросов^_^