Skip to content

синтаксис no syntax

Dmitry Ponyatov edited this page Aug 19, 2019 · 1 revision

синтаксис 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()

Да, это весь парсер.

Clone this wiki locally