我很快就用PHP提出了某种实验性编程语言的解释器(是的,在PHP中)。语言本身并没有什么特别之处,我只是想尝试一下。
我得到了基本的工作(Hello World,输入到输出,字符串操作,算术)但我对块和分组语句的管理感到困惑。
我的意思是:PHP和大多数其他语言允许您这样做:((2+2)*(8+2)+2)
,当然不仅仅是数学计算。
我的程序结构目前包含一个这样构建的多维数组:
ID => Type (Identifier, String, Int, Newline, EOF, Comma, ...)
Contents (If identifier, int or string)
答案 0 :(得分:4)
我建议您阅读有关编写编译器/解释器的介绍性文章或书籍。在线和图书馆有很多关于这个主题的优秀书籍和文章。我会给出链接,但我不知道你的背景是什么。
通常,制作解释器的第一步是使用树结构(而不是数组)。例如:
+
/ \
* 2
/ \
+ +
/ \ / \
2 2 8 2
无论您使用何种语言以及您尝试解析的语言,此部分或多或少都相同。从那里,您可以直接评估树,也可以将其转换为不同的结构。
答案 1 :(得分:0)
首先,您需要让您的语言了解运算符优先级。然后你给(运算符一个非常低的优先级,并且)运算符一个非常高的运算符。但是这个主题对于SO答案来说实在太复杂了 - 你需要阅读评估表达式的方法。看看SO编译器& Learning to write a compiler
的翻译资源