Сравнительная сложность языка
Полезная статья? Пожалуйста, поставьте "+"
Языки программирования и методы трансляции - Содержание
Модула исходно проектировался как простой язык, но с большими выразительными средствами, поэтому интересно сравнить его сложность с основными языками программирования. Практически невозможно однозначно определить некоторый критерий, значение которого можно было бы вычислить и который без каких-либо оговорок можно было бы назвать "сложность языка программирования". Однако описание любого языка программирования строго формализовано описанием его синтаксиса. Конечно, синтаксис – это лишь внешняя форма, но он играет важную роль. Синтаксические единицы являются одновременно и основными смысловыми понятиями любого языка: модуль, класс, блок, функция, процедура, метод, оператор, выражение.
Здесь рассматриваются описания языков при помощи нотации РБНФ. Правила, записанные на РБНФ, (как и текст на языке программирования) состоят из отдельных элементов – лексем. Лексемами являются названия понятий, называемые в теории формальных языков нетерминальными символами или просто нетерминалами. Например, в правиле:
ПоследовательностьОператоров = Оператор {";" Оператор}.
нетерминалами являются ПоследовательностьОператоров и Оператор.
Терминальные символы – это те знаки, из которых и состоит в конечном счете (terminal — конечный, заключительный) программа. При записи на РБНФ терминальные символы записываются в кавычках. В приведенном примере один терминал – ";". Терминальные символы это тоже лексемы РБНФ. Наконец к числу лексем относятся специальные знаки, используемые в самой РБНФ. В правиле про последовательность операторов это знак равенства, фигурные скобки и точка в конце. Пример описания языка Modula-2 в форме РБНФ приведен в Приложении В.
Общее число лексем в описании синтаксиса языка может служить обобщенной характеристикой размера этого описания. Число лексем использовать в качестве меры объема гораздо лучше, чем, скажем, число знаков в описании. В этом случае значение нашего критерия не будет зависеть от того, на каком языке (русском, английском) или какими конкретно словами названы нетерминалы.
Число различных нетерминалов – следующая характеристика, которую мы будем вычислять. Количество используемых для описания языка понятий – важное свойство, от которого зависит легкость освоения этого языка. Можно заметить, что число нетерминалов должно быть равно числу правил в описании синтаксиса, поскольку для каждого понятия обязано существовать ровно одно правило. Набор и количество различных терминальных символов языка, упомянутых в синтаксических формулах, характеризуют лексику языка – набор знаков и специальных символов. Во всех обсуждаемых нами языках существуют служебные слова, которые могут употребляться только в строго определенном смысле. Их, программист, вообще-то, должен знать наизусть. Реузультаты расчета приведены в Таблице 1.
Таблица 1. Сравнительная сложность некоторых ЯВУ[16]
Элементы
|
Pascal
|
Turbo
Pascal
5.5
|
Modula-
2
|
Oberon-
2
|
C
|
C++
|
Java
|
Ada
|
Лексемы
|
1085
|
1410
|
887
|
726
|
917
|
1662
|
1771
|
2206
|
Нетерминалы
|
119
|
135
|
70
|
43
|
53
|
126
|
174
|
226
|
Терминалы
|
92
|
87
|
88
|
91
|
213
|
131
|
121
|
102
|
Служебные
слова
|
25
|
52
|
39
|
34
|
47
|
47
|
48
|
63
|
Линия языков, начинающаяся от Pascal и включающая в себя языки Modula-2, Oberon- 2, автором которых является Никлаус Вирт – линия Вирта [16], которой он неуклонно придерживается: наращивание мощи языка без его усложнения. Модула существенно мощнее и совершеннее Паскаля, но проще. Oberon-2 обогатил Модулу средствами объектно-ориентированного программирования – расширяемыми записями, и при этом не только не стал более сложным, но заметно упрощен.
|
Категория: Языки программирования и методы трансляции | Добавил: Ni-Cd (08 Декабря 2011)
|
Просмотров: 1691
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
|
Онлайн |
Онлайн всего: 13 Гостей: 13 Пользователей: 0 |
|
|