编程语言中的语句层次结构

时间:2010-03-30 09:03:55

标签: php parsing programming-languages interpreter language-design

我很快就用PHP提出了某种实验性编程语言的解释器(是的,在PHP中)。语言本身并没有什么特别之处,我只是想尝试一下。

我得到了基本的工作(Hello World,输入到输出,字符串操作,算术)但我对块和分组语句的管理感到困惑。

我的意思是:PHP和大多数其他语言允许您这样做:((2+2)*(8+2)+2),当然不仅仅是数学计算。

我的程序结构目前包含一个这样构建的多维数组:

ID => Type (Identifier, String, Int, Newline, EOF, Comma, ...)
      Contents (If identifier, int or string)
  • 我怎样才能允许语句按照定义的顺序执行,例如 上面的PHP示例?

2 个答案:

答案 0 :(得分:4)

我建议您阅读有关编写编译器/解释器的介绍性文章或书籍。在线和图书馆有很多关于这个主题的优秀书籍和文章。我会给出链接,但我不知道你的背景是什么。

通常,制作解释器的第一步是使用树结构(而不​​是数组)。例如:

        +
       / \
      *   2
    /   \
  +       +
 / \     / \
2   2   8   2

无论您使用何种语言以及您尝试解析的语言,此部分或多或少都相同。从那里,您可以直接评估树,也可以将其转换为不同的结构。

答案 1 :(得分:0)

首先,您需要让您的语言了解运算符优先级。然后你给(运算符一个非常低的优先级,并且)运算符一个非常高的运算符。但是这个主题对于SO答案来说实在太复杂了 - 你需要阅读评估表达式的方法。看看SO编译器& Learning to write a compiler

的翻译资源