2015-04-12 5 views
0

Я изучаю лексер на Курс программирования языков Уэстли Веймера.Python lexer лексический анализ правил приоритета токена, касающийся двусмысленностей --- почему STRING имеет приоритет над WORD?

Отмечает здесь https://www.udacity.com/wiki/cs262/unit-2#quiz-rule-order

{видео, если вы заботитесь смотреть, последние 40 секунд.} https://www.udacity.com/course/viewer#!/c-cs262/l-48713810/e-48652568/m-48676965

Тест: Когда два определения маркеров может соответствовать той же строки, поведение наш лексический анализатор может быть неоднозначным .....

Предположим, что мы имеем строку ввода

привет, «мир , "

и мы хотим, чтобы входная строка имела значение WORD STRING . Какое правило должно быть последним? т. Е. «...... то, что я хотел бы вам сделать, это сказать мне, какая из этих функций, какое из этих правил, должно было прийти последним, имея в виду, что тот, который на первом месте, побеждает чтобы приветствовать «мир», чтобы сломать слово, за которым следует строка ».

def t_WORD(token): 
    r'[^ <>]+' 


def t_STRING(token)        
    r'"[^"]*"' 

........ Ответ:

t_STRING , затем t_WORD

.......... Я не понимаю даже после просмотра видео несколько раз, почему STRING имеет приоритет над WORD?

Пожалуйста, просветите.

спасибо.

ответ

1

Оба шаблона соответствуют "world", но желание состоит в том, чтобы был возвращен токен t_STRING. Для этого должен иметь приоритет, поэтому он должен быть помещен первым, потому что, если есть два или более шаблона с одинаковым самым длинным совпадением, выигрывает самый ранний шаблон.