-
Notifications
You must be signed in to change notification settings - Fork 5
синтаксис no syntax
Синтаксис metaL
также наследован от языка Форт, который не имеет синтаксиса: любая последовательность непробельных символов воспринимается как имя исполнимого объекта, который нужно найти в словаре, и выполнить (или скомпилировать в определение новой структуры). На уровне синтаксиса языка не определено никаких управляющих структур, их функции исполняют обычные исполняемые фреймы, помеченные флагом IMMED. При желании вы можете сами определять новые слова, компилирующие управляющие структуры.
Такая простота языка позволяет очень просто писать парсеры исходного кода, достаточно выделить все непробельные символы с текущей позиции разбора, и проверить несколько частных случаев (строки, числа). Тем не менее, для того чтобы показать инструменты создания парсеров на Python, была применена библиотека PLY.
######################################################## no-syntax парсер (PLY)
import ply.lex as lex
tokens = ['symbol','integer']
t_ignore = ' \t\r\n'
t_ignore_comment = '[\\\#].*'
def t_integer(t):
r'[+\-]?[0-9]+'
return Integer(t.value)
def t_symbol(t):
r'[^ \t\r\n\\\#]+'
return Symbol(t.value)
def t_error(t):
raise SyntaxError(t)
lexer = lex.lex()
Да, это весь парсер.