You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Предлагаются следующие шаги для развития front-end’а. Частично они навеяны #7.
Псевдокомментарии *$ не должны быть синтаксической ошибкой внутри функций.
Выкинуть костыль с (Symbol Word t.SrcPos e.Chars*).
Объединить модули Refal5-AST, Refal5-Lexer, Refal5-Parser и Refal5-Tokens.
Исходя из цели фреймворка (Обдумать построение дерева разбора #7) фронт-энд будет использоваться преимущественно целиком — редко лексер будет использоваться отдельно от парсера. Поэтому для удобства логично их объединить в одном модуле.
Модули Refal5-AST и Refal5-Tokens нужны Рефалу-05 из-за *$EENUM’ов. При использовании фреймворка вместе с Рефалом-5 в них находятся только две некритичные функции — Builtins и TokName.
Поэтому имеет смысл не объединять все четыре файла в один, а объединить Refal5-AST и Refal5-Tokens в Refal5-FrontEnd-DefsR5FW-Parser-Defs, а Refal5-Lexer и Refal5-Parser — в Refal5-FrontEndR5FW-Parser (см. комментарий).
Переписать (отрефакторить) сам парсер — вместо имеющегося рекурсивного спуска и двухпроходного алгоритма, использовать «перенос-свёртку», апробированную в Переписать парсер в виде «перенос-свёртка» Refal-05#29 и одиночный проход. Будет ли это точным рефакторингом — не очевидно, поскольку при переписывании сообщения об ошибках могут измениться.
Ввести несколько функций для синтаксического и лексического анализа: R5FW-ParseFile, R5FW-ParseText, R5FW-ParseTokens, R5FW-ScanFile, R5FW-ScanText, принимающие имя файла (***File), последовательность строк с начальной позицией (***Text) и список токенов (R5FW-ParseTokens). Функции, работающие со строкой (R5FW-***String), ввести тоже можно, но они будут эквивалентны R5FW-***Text с передачей единственной строки.
Предлагаются следующие шаги для развития front-end’а. Частично они навеяны #7.
Псевдокомментарии
*$не должны быть синтаксической ошибкой внутри функций.Выкинуть костыль с
(Symbol Word t.SrcPos e.Chars*).Объединить модули
Refal5-AST,Refal5-Lexer,Refal5-ParserиRefal5-Tokens.Исходя из цели фреймворка (Обдумать построение дерева разбора #7) фронт-энд будет использоваться преимущественно целиком — редко лексер будет использоваться отдельно от парсера. Поэтому для удобства логично их объединить в одном модуле.
Модули
Refal5-ASTиRefal5-Tokensнужны Рефалу-05 из-за*$EENUM’ов. При использовании фреймворка вместе с Рефалом-5 в них находятся только две некритичные функции —BuiltinsиTokName.Поэтому имеет смысл не объединять все четыре файла в один, а объединить
Refal5-ASTиRefal5-TokensвRefal5-FrontEnd-DefsR5FW-Parser-Defs, аRefal5-LexerиRefal5-Parser— вRefal5-FrontEndR5FW-Parser(см. комментарий).Переписать (отрефакторить) сам парсер — вместо имеющегося рекурсивного спуска и двухпроходного алгоритма, использовать «перенос-свёртку», апробированную в Переписать парсер в виде «перенос-свёртка» Refal-05#29 и одиночный проход. Будет ли это точным рефакторингом — не очевидно, поскольку при переписывании сообщения об ошибках могут измениться.
Ввести несколько функций для синтаксического и лексического анализа:
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для него — именем функции.