首先,我正在用 Python 制作解释器,而不是编译为机器代码的实际编译器。我最近浏览了很多编译器构建指南,我了解为解析器生成标记和构建语法树以评估算术表达式的基础知识,但我不太了解如何解析带有函数调用的表达式,像
图(一)
1 + pow(1, 1)
或者当用户定义这样的函数时如何解析行
图(b)
function newFunction( someArgs ){
... some magic ...
}
在图(a)中,我应该如何标记这个表达式?在阅读了保留字“pow”之后,我是否应该将所有内容都抓取到右括号并将其传递给解析器?或者我应该将“pow”、“(”、“1”、“1”和“)”分别作为单独的标记添加到我的解析树中吗?
在斐波那契。(b) 在编译函数定义时,我什至不知道从哪里开始。任何让我朝着正确方向前进的信息将不胜感激。
编辑:我正在使用 Backus-Naur 形式语法:
S ::= 表达式
表达式 ::= 术语 | 术语([+-] 术语)+
术语 ::= 因子 | 因子([*/] 因子)+
因子 ::= 数字 | ( 表达 )
数字 ::= [0-9]+