如何为if和while语句编写简单的解析器?

问题描述:

我需要编写一个简单的解析器,将令牌转换为解析器树。 我已经写了返回令牌的LexicalAnalyzer。现在,我想要 为“if and while”语句(开始时)编写规则,因此我可以将此规则传递给解析器并创建树。 所以我需要以这种方式编写解析器,所以我可以编写新的规则。如何为if和while语句编写简单的解析器?

你能告诉我如何在C#中实现它吗?你能举个例子吗?

+0

我读了所有类型的假,但不知道如何开始实现这一点。我看到像a:b |的定义c,c:终端。如果我正确地理解了这一点,这意味着规则,但是如何实现或者我错误的方式 – theateist

在递归下降解析器中,如果您具有常规的块和表达式解析器,则很容易实现这些语句。在伪代码,他们基本上是:

void ParseIf() 
{ 
    Match("if"); 
    Match("("); 
    ParseExpression(); 
    Match(")"); 
    ParseBlock(); 
} 

void ParseWhile() 
{ 
    Parse("while"); 
    Parse("("); 
    ParseExpression(); 
    Parse(")"); 
    ParseBlock(); 
} 
+0

你能指定什么Match,MatchExpression,Parse,ParseBlock是什么意思? – theateist

+0

'Match'基本上读取你给它的令牌并忽略它,这是为了确保它在那里。另两个分别解析表达式和块。 – Blindy