Лексическая грамматика
В информатике или лексическая грамматика лексическая — это формальная грамматика, определяющая синтаксис токенов структура . Программа написана с использованием символов, определяемых лексической структурой используемого языка. Набор символов эквивалентен алфавиту, используемому в любом письменном языке. Лексическая грамматика устанавливает правила, управляющие тем, как последовательность символов делится на подпоследовательности символов, каждая часть которых представляет собой отдельный токен. Это часто определяется с помощью регулярных выражений . [1]
Например, лексическая грамматика многих языков программирования определяет, что строковый литерал начинается с символа. " символ и продолжается до тех пор, пока не будет найдено совпадение " ( экранирование делает это более сложным), что идентификатор представляет собой буквенно-цифровую последовательность (буквы и цифры, обычно также допускающие подчеркивание и запрещающие начальные цифры), и что целочисленный литерал представляет собой последовательность цифр. Итак, в следующем символе последовательность "abc" xyz1 23 токенами являются строка , идентификатор и число (плюс токены пробелов), поскольку символ пробела завершает последовательность символов, образующих идентификатор. Кроме того, определенные последовательности классифицируются как ключевые слова – они обычно имеют ту же форму, что и идентификаторы (обычно алфавитные слова), но классифицируются отдельно; формально у них другой тип токена. [2]
Примеры
[ редактировать ]Далее следуют регулярные выражения для общих лексических правил (например, C).
Неэкранированный строковый литерал (кавычка, за которой следуют некавычки, заканчивающиеся кавычкой):
"[^"]*"
Экранированный строковый литерал (кавычка, за которой следуют экранированные символы или не кавычки, заканчивающиеся кавычкой):
"(\.|[^\"])*"
Целочисленный литерал:
[0-9]+
Десятичный целочисленный литерал (без ведущего нуля):
[1-9][0-9]*|0
Шестнадцатеричный целочисленный литерал:
0[Xx][0-9A-Fa-f]+
Восьмеричный целочисленный литерал:
0[0-7]+
Идентификатор:
[A-Za-z_$][A-Za-z0-9_$]*
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Буя (2009). Объектно-ориентированное программирование на Java: основы и приложения . Тата МакГроу-Хилл Образование. стр. 100-1 57–. ISBN 978-0-07-066908-6 .
- ^ Джеймс Гослинг (2000). Спецификация языка Java . Аддисон-Уэсли Профессионал. стр. 9–. ISBN 978-0-201-31008-5 .