【发布时间】:2016-03-28 20:08:40
【问题描述】:
我正在尝试构建一个解析器,但我似乎无法理解它是如何工作的。我需要有人指引我正确的方向,这样我才能从那里捡起它。
所以我有一个分词器和一个词法分析器。
分词器输出:
[int,add,(,int,a,,,int,b,),=,a,+,b,int,letin,(,int,a,),=,let,b,=, 10,in,add,(,a,,,b,),int,equal,(,int,a,,,int,b,),=,if,a,==,b,then,letin,( ,a,),else,1,int,main,(,int,input,),=,equal,(,input,,,2,)]
词法分析器输出:
[TYPE_INT,IDENTIFIER,OPEN_P,TYPE_INT,IDENTIFIER,COMMA,TYPE_INT,IDENTIFIER,CLOSE_P,ASSIGN,IDENTIFIER,ARITH_ADD,IDENTIFIER,TYPE_INT,IDENTIFIER,OPEN_P,TYPE_INT,IDENTIFIER,CLOSE_P,ASSIGN,LET,IDENTIFIER,ASSIGN, IDENTIFIER,LET_IN,IDENTIFIER,OPEN_P,IDENTIFIER,COMMA,IDENTIFIER,CLOSE_P,TYPE_INT,IDENTIFIER,OPEN_P,TYPE_INT,IDENTIFIER,COMMA,TYPE_INT,IDENTIFIER,CLOSE_P,ASSIGN,COND_IF,IDENTIFIER,LOGIC_EQ,IDENTIFIER,COND_THEN,IDENTIFIER,OPEN_P, IDENTIFIER,CLOSE_P,COND_ELSE,INTEGER,TYPE_INT,IDENTIFIER,OPEN_P,TYPE_INT,IDENTIFIER,CLOSE_P,ASSIGN,IDENTIFIER,OPEN_P,IDENTIFIER,COMMA,INTEGER,CLOSE_P]
现在我必须构建一个解析器。我不知道如何开始以及如何包含参数化构造。
我的规则是这样的。
program --> functionList.
functionList --> function,functionListCollection.
functionListCollection --> functionList | [].
function --> typeID(typeIdList),[=],expression.
typeID --> [int],[id] | [bool],[id].
typeIdList --> typeID,typeIdListCollection.
typeIdListCollection --> [,], typeIdList | [].
expression --> [if], comparison, [then], value, [else], value.
expression --> [let],[id],[=], value, [in], expression.
expression --> value, extraExpression.
extraExpression --> arithmetic | [].
arithmetic --> [+], value | [-], value.
comparison --> value, comparisonRight.
comparisonRight --> [=],[=],value.
comparisonRight --> [!], [=], value.
comparisonRight --> [>], value.
comparisonRight --> [>], [=], value.
value --> [number].
value --> [id], valueParameters.
valueParameters --> [(],parameters,[)]. | [].
parameters --> value, parametersList.
parametersList --> [,], parameters | [].
我正在寻找构建一个谓词,该谓词采用词法列表并将列表从解析器中取出。然后,我将通过查看令牌列表来替换数字和标识符。一些关于如何开始的帮助将不胜感激。谢谢。
【问题讨论】: