Я читаю здесь учебник по компилятору www.buildyourownlisp.com .Он использует комбинатор синтаксического анализа, называемый mpc.То, что у меня есть на данный момент, будет анализировать польскую запись, но я пытаюсь понять, как использовать стандартную запись с ней.Я просто не могу понять, как это сделать.Правила синтаксического анализатора следующие:
. Any character is required.
a The character a is required.
[abcdef] Any character in the set abcdef is required.
[a-f] Any character in the range a to f is required.
a? The character a is optional.
a* Zero or more of the character a are required.
a+ One or more of the character a are required.
^ The start of input is required.
$ The end of input is required.
"ab" The string ab is required.
'a' The character a is required.
'a' 'b' First 'a' is required, then 'b' is required.
'a' | 'b' Either 'a' is required, or 'b' is required.
'a'* Zero or more 'a' are required.
'a'+ One or more 'a' are required.
<abba> The rule called abba is required.
Польская запись записана так:
" \
number: /-?[0-9]+/'.'?/[0-9]+/ ; \
operator: '+' | '-' | '*' | '/' | '%' | \"add\" | \"sub\" | \"mul\" | \"div\" ; \
expr: <number> | '(' <operator> <expr>+ ')' ; \
dlispy: /^/ <operator> <expr>+ /$/ ;",
Мне удалось заставить его принимать десятичные числа, добавив '.'?/[0-9]+/
, но я не могу понять, как реструктурировать его так, чтобы он принимал стандартные обозначения, например 2*(3+2)
вместо *2 (+ 3 2)
.Я знаю, что мне придется переписать правила expr и dlispy, но я новичок в regex и BNF.Надеюсь, вы можете помочь, спасибо