Проведенные эксперименты и результаты

Для сравнения между собой были выбраны:

  1. Python модули Tokenizer (лексический анализатор) и AST (синтаксический анализатор).

  2. Анализаторы, сгенерированные при помощи flex и bison.

  3. Модули lexer и parser представленного компилятора.

Сравнение времени работы лексических анализаторов

Количество лексем

100000 1000000 2000000 3000000 4000000 5000000

Лексические анализаторы

Tokenizer (ms)

254

2791

5657

8587

11717

14103

flex (ms)

15

155

296

437

632

752

lexer (ms)

12

123

265

401

479

607

Сравнение времени работы синтаксических анализаторов

Количество функций

100

1000

10000

100000

200000

Синтаксические анализаторы

python AST (ms)

22

174

2663

17934

26901

bison (ms)

8

28

236

1726

2589

parser (ms)

2

25

175

1458

2187

Выводы

Из таблиц видно, что реализации модулей python сильно медленнее в сравнении с остальными, в то время как остальные модули близки друг к другу. Отметим, что:

  1. Часть операций для Tokenizer и AST выполняется интерпретатором Python, другая часть выполняется Cи библиотекой.

  2. Модули Tokenizer и AST поддерживают большее количество языковых конструкций.

  3. Модуль AST также сохраняет большее количество второстепенной информации, которая используется следующими модулями компилятора.

Назад