Сканирование языка с помощью строк без разделителей с помощью вложенных токенов - PullRequest
0 голосов
/ 01 марта 2019

Я хочу создать лексер / парсер для языка, в котором есть строки без разделителей.
Какая часть языка является строкой, определяется предшествующей ей командой.

Например, он имеетоператоры, которые выглядят так:

pause 5
alert Hello world[CRLF] this contains 'pause' once (1) 

Предупреждение в этом случае может заканчиваться любой строкой, включая ключевые слова и цифры.Кроме того, в тексте могут содержаться теги типа [CRLF], которые я тоже хочу разделить.В идеале я бы хотел, чтобы это было разбито на:

[PAUSE][INT 5]
[ALERT][STR "Hello world"][CRLF][STR " this contains 'pause' once (1)"]

В настоящее время я использую flex, но из того, что я собрал, такого рода вещи невозможно с помощью flex.
Как можноЯ добиваюсь того, чего хочу здесь?

1 Ответ

0 голосов
/ 01 марта 2019

(Поскольку один из ваших тегов - "regex", я предложу негибкий подход.)

Из примера кажется, что вы могли бы просто:

  1. сопоставьте каждую строку с ^(\w+) (.+), чтобы получить текст команды и аргументов, а затем
  2. получите отдельные аргументы, разделив текст аргументов на (\[\w+\]) (при условии, что функция разбиения вашей библиотеки регулярных выражений может вернуть обастроки и разделенные строки).

Возможно, ваша реальная ситуация более сложна, и что-то вроде flex имеет больше смысла, но я пока не вижу этого.

...