我在这里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 规则,但我对正则表达式和 BNF 不熟悉。希望能帮到你,谢谢