Open Mazdaywik opened 5 years ago
Файлы Refal5-AST
и Refal5-Tokens
нужно объединять в R5FW-Parser-Defs
, файлы Refal5-Parser
и Refal5-Lexer
— в R5FW-Parser
. Причины:
R5FW-
— см. #5.FrontEnd
писать длинно. «Голый» лексер нужен гораздо реже парсера (см. #7), поэтому вместо импорта обоих файлов удобнее подключать один.
Предлагаются следующие шаги для развития front-end’а. Частично они навеяны #7.
*$
не должны быть синтаксической ошибкой внутри функций.(Symbol Word t.SrcPos e.Chars*)
.[x] Объединить модули
Refal5-AST
,Refal5-Lexer
,Refal5-Parser
иRefal5-Tokens
.Исходя из цели фреймворка (#7) фронт-энд будет использоваться преимущественно целиком — редко лексер будет использоваться отдельно от парсера. Поэтому для удобства логично их объединить в одном модуле.
Модули
Refal5-AST
иRefal5-Tokens
нужны Рефалу-05 из-за*$EENUM
’ов. При использовании фреймворка вместе с Рефалом-5 в них находятся только две некритичные функции —Builtins
иTokName
.Поэтому имеет смысл не объединять все четыре файла в один, а объединить
Refal5-AST
иRefal5-Tokens
вRefal5-FrontEnd-Defs
R5FW-Parser-Defs
, аRefal5-Lexer
иRefal5-Parser
— вRefal5-FrontEnd
R5FW-Parser
(см. комментарий).[ ] Ввести несколько функций для синтаксического и лексического анализа:
R5FW-ParseFile
,R5FW-ParseText
,R5FW-ParseTokens
,R5FW-ScanFile
,R5FW-ScanText
, принимающие имя файла (***File
), последовательность строк с начальной позицией (***Text
) и список токенов (R5FW-ParseTokens
). Функции, работающие со строкой (R5FW-***String
), ввести тоже можно, но они будут эквивалентныR5FW-***Text
с передачей единственной строки.Функции должны возвращать результат в формате
s.Ok
облегчает анализ: не нужно средиe.Messages
искатьError
, чтобы понять, что были ошибки.s.Type
может быть, например,Error-UndeclaredFunction
, аe.Info
для него — именем функции.