Я пытаюсь создать подходящий грамматик для некоторых арифметических выражений.Действительные токены для моих выражений следующие:
'+', '-', '/', '*'
и '**'
для полномочий.Выражения также могут содержать символы и функции.Функции могут принимать несколько аргументов, некоторые из которых могут быть необязательными.Из того, что я помню из разбора выражения, я должен придумать грамматику, которая не является леворекурсивной и также сохраняет ассоциативность операторов.
Итак, вот что я придумал после небольшого поиска (хотя и не уверен насчет ассоциативности):
E = T Eopt
Eopt = '+' T Eopt | '-' T Eopt | ε
T = F Topt
Topt = '*' F Topt | '/' F Topt | ε
F = Number | '(' E ')'
, который можно найти во многих учебниках.Какие изменения необходимы в приведенной выше грамматике, чтобы она могла сочетать токен питания ('**'), а также символы и функции?
Пожалуйста, не указывайте мне на flex / yacc и т. Д. Спасибо.