パーサーを構築しようとしていますが、どのように動作するのかわかりません。誰かが私を正しい方向に向けて助けを必要とするので、そこからそれを拾うことができます。プロローグ内でのパーサーの作成
私はトークナイザとレクサーを持っています。
トークナイザ出力:
[INT、追加、(INT、,,, int型、B、)、=、+、B、INT、letin、(INT、、)、 =、let、b、=、10、in、add、(、a ,,, b)、int、等号、(int、a、int、b))=、if、a、==
レクサー出力:0、1、0、1、
[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 | [].
私は、レキシードリストを取り、そのパーサーからリストを出す述語を作成しています。次に、トークンリストを調べて番号と識別子を置き換えます。どのように起動するかに関するいくつかの助けが大いに感謝されるでしょう。ありがとうございました。