Токенизация может состоять из нескольких шагов, например, если у вас есть этот HTML-код:
<html>
<head>
<title>My HTML Page</title>
</head>
<body>
<p style="special">
This paragraph has special style
</p>
<p>
This paragraph is not special
</p>
</body>
</html>
токенизатор может преобразовать эту строку в плоский список значащих токенов, отбрасывая пробелы (спасибо, SasQ за исправление):
["<", "html", ">",
"<", "head", ">",
"<", "title", ">", "My HTML Page", "</", "title", ">",
"</", "head", ">",
"<", "body", ">",
"<", "p", "style", "=", "\"", "special", "\"", ">",
"This paragraph has special style",
"</", "p", ">",
"<", "p", ">",
"This paragraph is not special",
"</", "p", ">",
"</", "body", ">",
"</", "html", ">"
]
может быть несколько проходов токенизации для преобразования списка токенов в список токенов даже более высокого уровня, как это может сделать следующий гипотетический анализатор HTML (который все еще является простым списком):
[("<html>", {}),
("<head>", {}),
("<title>", {}), "My HTML Page", "</title>",
"</head>",
("<body>", {}),
("<p>", {"style": "special"}),
"This paragraph has special style",
"</p>",
("<p>", {}),
"This paragraph is not special",
"</p>",
"</body>",
"</html>"
]
затем синтаксический анализатор преобразует этот список токенов в дерево или граф, который представляет исходный текст таким способом, который более удобен для доступа / манипулирования программой:
("<html>", {}, [
("<head>", {}, [
("<title>", {}, ["My HTML Page"]),
]),
("<body>", {}, [
("<p>", {"style": "special"}, ["This paragraph has special style"]),
("<p>", {}, ["This paragraph is not special"]),
]),
])
на этом этапе анализ завершен; и тогда пользователь должен интерпретировать дерево, изменить его и т. д.