Чтобы предисловие к этому, мои знания о подобных вещах невелики.Является ли это двусмысленной грамматикой? Как его разрешить?
В любом случае, я разрабатываю контекстно-свободную грамматику, чтобы описать структуру алгебраических выражений, чтобы я мог научить себя, как работает алгоритм синтаксического анализа CYK. Я понимаю, как такая структура может работать только с инфиксными алгебраическими выражениями, но я не могу понять, как разработать грамматику, которая может обрабатывать как унарные, так и двоичные определения оператора «-».
Для справки, вот грамматику я написал (где S является начальным символом) в КНФ:
S -> х
А -> OS
S -> LB
B -> SR
S -> KS
О -> +
О -> -
О -> *
О ->/
О ->^
K -> -
L -> (
R ->)
Проблема заключается в том, что, как CYK разборе алгоритма может знать заранее, нужно ли выбирать между S -> KS и A -> OS когда он сталкивается с оператором «-»? Является ли такая грамматическая контекст свободной? И самое главное, поскольку языки программирования могут обрабатывать языки с двоичным и унарным знаком минус, как я должен разумно разобрать это?
Подсказка будет заключаться в том, что двоичный код всегда должен иметь номер перед ним, тогда как унарный - либо в начале, либо ему предшествует оператор. – nus