"同时" lexing和解析vs lexing然后解析?

时间:2016-10-15 22:41:57

标签: parsing lexical-analysis

我已经看过几种会吃掉令牌的语言,然后解析令牌,然后当他们需要在解析时检查下一个令牌时,他们会从词法分析器请求它。

所以你有for entry in listOfCommands: if entry[0] == 'insert': #I will execute a part of the program elif entry[0] == 'update': #execute something else elif entry[0] == 'find': #execute something else 你的lex,在这种情况下检查它是什么,if,lex并确保它是a(解析一个在这种情况下请求3的表达式,直到它完成解析表达式,并且然后你lex并期望一个右括号。

另一种选择是你将这个输入流作为if (x == 3),然后你将该令牌列表提供给解析器,解析器将它解析为AST。

这两种技术的优点/缺点是什么?

1 个答案:

答案 0 :(得分:0)

对于大多数语法而言,将整个输入作为第一遍传递到令牌列表中,然后在解析传递期间从列表中获取令牌,或者根据需要获取lex,这并不重要。第二种方法避免了对内存中令牌列表的需要,第一种方法意味着您可以更快地解析几次,这可能是您想要在解释器中执行的。

但是,如果语法需要多个前瞻标记或者不是左右标记,那么您可能需要更多。虽然自然语言有一些奇怪的解析规则("时间过得像箭头,果蝇像香蕉和#34;),计算机语言通常设计为可解析的简单递归下降解析器,带有一个前瞻标记。