1.3.11 Test
Now running the debug version of minilang, minilangd
, with the following arguments should generate the following output:
C:\minilang\x64\Debug>minilangd --test-parser C:\soul-4.0.0\examples\minilang_tests\fibonacci.minilang
<parse>
<SourceFile>
<try>int fibonacci(int n)</try>
<Function>
<try>int fibonacci(int n)</try>
<Type>
<try>int fibonacci(int n)</try>
<success>int</success>
</Type>
<Identifier>
<try>fibonacci(int n)</try>
<success>fibonacci</success>
</Identifier>
<ParameterList>
<try>int n)</try>
<Parameter>
<try>int n)</try>
<Type>
<try>int n)</try>
<success>int</success>
</Type>
<Identifier>
<try>n)</try>
<success>n</success>
</Identifier>
<success>int</success>
</Parameter>
<success>int</success>
</ParameterList>
<CompoundStatement>
<try>{</try>
<Statement>
<try>if (n == 0) return 0;</try>
<IfStatement>
<try>if (n == 0) return 0;</try>
<Expression>
<try>n == 0) return 0;</try>
<EqualityExpression>
<try>n == 0) return 0;</try>
<RelationalExpression>
<try>n == 0) return 0;</try>
<AdditiveExpression>
<try>n == 0) return 0;</try>
<MultiplicativeExpression>
<try>n == 0) return 0;</try>
<UnaryExpression>
<try>n == 0) return 0;</try>
<UnaryOperator>
<try>n == 0) return 0;</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>n == 0) return 0;</try>
<PrimaryExpression>
<try>n == 0) return 0;</try>
<Literal>
<try>n == 0) return 0;</try>
<BooleanLiteral>
<try>n == 0) return 0;</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>n == 0) return 0;</try>
<fail/>
</IntegerLiteral>
<fail/>
</Literal>
<Identifier>
<try>n == 0) return 0;</try>
<success>n</success>
</Identifier>
<success>n</success>
</PrimaryExpression>
<success>n</success>
</PostfixExpression>
<success>n</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>== 0) return 0;</try>
<fail/>
</MultiplicativeOperator>
<success>n</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>== 0) return 0;</try>
<fail/>
</AdditiveOperator>
<success>n</success>
</AdditiveExpression>
<RelationalOperator>
<try>== 0) return 0;</try>
<fail/>
</RelationalOperator>
<success>n</success>
</RelationalExpression>
<EqualityOperator>
<try>== 0) return 0;</try>
<success>==</success>
</EqualityOperator>
<RelationalExpression>
<try>0) return 0;</try>
<AdditiveExpression>
<try>0) return 0;</try>
<MultiplicativeExpression>
<try>0) return 0;</try>
<UnaryExpression>
<try>0) return 0;</try>
<UnaryOperator>
<try>0) return 0;</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>0) return 0;</try>
<PrimaryExpression>
<try>0) return 0;</try>
<Literal>
<try>0) return 0;</try>
<BooleanLiteral>
<try>0) return 0;</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>0) return 0;</try>
<success>0</success>
</IntegerLiteral>
<success>0</success>
</Literal>
<success>0</success>
</PrimaryExpression>
<success>0</success>
</PostfixExpression>
<success>0</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>) return 0;</try>
<fail/>
</MultiplicativeOperator>
<success>0</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>) return 0;</try>
<fail/>
</AdditiveOperator>
<success>0</success>
</AdditiveExpression>
<RelationalOperator>
<try>) return 0;</try>
<fail/>
</RelationalOperator>
<success>0</success>
</RelationalExpression>
<EqualityOperator>
<try>) return 0;</try>
<fail/>
</EqualityOperator>
<success>n</success>
</EqualityExpression>
<success>n</success>
</Expression>
<Statement>
<try>return 0;</try>
<IfStatement>
<try>return 0;</try>
<fail/>
</IfStatement>
<WhileStatement>
<try>return 0;</try>
<fail/>
</WhileStatement>
<ReturnStatement>
<try>return 0;</try>
<Expression>
<try>0;</try>
<EqualityExpression>
<try>0;</try>
<RelationalExpression>
<try>0;</try>
<AdditiveExpression>
<try>0;</try>
<MultiplicativeExpression>
<try>0;</try>
<UnaryExpression>
<try>0;</try>
<UnaryOperator>
<try>0;</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>0;</try>
<PrimaryExpression>
<try>0;</try>
<Literal>
<try>0;</try>
<BooleanLiteral>
<try>0;</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>0;</try>
<success>0</success>
</IntegerLiteral>
<success>0</success>
</Literal>
<success>0</success>
</PrimaryExpression>
<success>0</success>
</PostfixExpression>
<success>0</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>;</try>
<fail/>
</MultiplicativeOperator>
<success>0</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>;</try>
<fail/>
</AdditiveOperator>
<success>0</success>
</AdditiveExpression>
<RelationalOperator>
<try>;</try>
<fail/>
</RelationalOperator>
<success>0</success>
</RelationalExpression>
<EqualityOperator>
<try>;</try>
<fail/>
</EqualityOperator>
<success>0</success>
</EqualityExpression>
<success>0</success>
</Expression>
<success>return</success>
</ReturnStatement>
<success>return</success>
</Statement>
<success>if</success>
</IfStatement>
<success>if</success>
</Statement>
<Statement>
<try>if (n == 1) return 1;</try>
<IfStatement>
<try>if (n == 1) return 1;</try>
<Expression>
<try>n == 1) return 1;</try>
<EqualityExpression>
<try>n == 1) return 1;</try>
<RelationalExpression>
<try>n == 1) return 1;</try>
<AdditiveExpression>
<try>n == 1) return 1;</try>
<MultiplicativeExpression>
<try>n == 1) return 1;</try>
<UnaryExpression>
<try>n == 1) return 1;</try>
<UnaryOperator>
<try>n == 1) return 1;</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>n == 1) return 1;</try>
<PrimaryExpression>
<try>n == 1) return 1;</try>
<Literal>
<try>n == 1) return 1;</try>
<BooleanLiteral>
<try>n == 1) return 1;</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>n == 1) return 1;</try>
<fail/>
</IntegerLiteral>
<fail/>
</Literal>
<Identifier>
<try>n == 1) return 1;</try>
<success>n</success>
</Identifier>
<success>n</success>
</PrimaryExpression>
<success>n</success>
</PostfixExpression>
<success>n</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>== 1) return 1;</try>
<fail/>
</MultiplicativeOperator>
<success>n</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>== 1) return 1;</try>
<fail/>
</AdditiveOperator>
<success>n</success>
</AdditiveExpression>
<RelationalOperator>
<try>== 1) return 1;</try>
<fail/>
</RelationalOperator>
<success>n</success>
</RelationalExpression>
<EqualityOperator>
<try>== 1) return 1;</try>
<success>==</success>
</EqualityOperator>
<RelationalExpression>
<try>1) return 1;</try>
<AdditiveExpression>
<try>1) return 1;</try>
<MultiplicativeExpression>
<try>1) return 1;</try>
<UnaryExpression>
<try>1) return 1;</try>
<UnaryOperator>
<try>1) return 1;</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>1) return 1;</try>
<PrimaryExpression>
<try>1) return 1;</try>
<Literal>
<try>1) return 1;</try>
<BooleanLiteral>
<try>1) return 1;</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>1) return 1;</try>
<success>1</success>
</IntegerLiteral>
<success>1</success>
</Literal>
<success>1</success>
</PrimaryExpression>
<success>1</success>
</PostfixExpression>
<success>1</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>) return 1;</try>
<fail/>
</MultiplicativeOperator>
<success>1</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>) return 1;</try>
<fail/>
</AdditiveOperator>
<success>1</success>
</AdditiveExpression>
<RelationalOperator>
<try>) return 1;</try>
<fail/>
</RelationalOperator>
<success>1</success>
</RelationalExpression>
<EqualityOperator>
<try>) return 1;</try>
<fail/>
</EqualityOperator>
<success>n</success>
</EqualityExpression>
<success>n</success>
</Expression>
<Statement>
<try>return 1;</try>
<IfStatement>
<try>return 1;</try>
<fail/>
</IfStatement>
<WhileStatement>
<try>return 1;</try>
<fail/>
</WhileStatement>
<ReturnStatement>
<try>return 1;</try>
<Expression>
<try>1;</try>
<EqualityExpression>
<try>1;</try>
<RelationalExpression>
<try>1;</try>
<AdditiveExpression>
<try>1;</try>
<MultiplicativeExpression>
<try>1;</try>
<UnaryExpression>
<try>1;</try>
<UnaryOperator>
<try>1;</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>1;</try>
<PrimaryExpression>
<try>1;</try>
<Literal>
<try>1;</try>
<BooleanLiteral>
<try>1;</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>1;</try>
<success>1</success>
</IntegerLiteral>
<success>1</success>
</Literal>
<success>1</success>
</PrimaryExpression>
<success>1</success>
</PostfixExpression>
<success>1</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>;</try>
<fail/>
</MultiplicativeOperator>
<success>1</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>;</try>
<fail/>
</AdditiveOperator>
<success>1</success>
</AdditiveExpression>
<RelationalOperator>
<try>;</try>
<fail/>
</RelationalOperator>
<success>1</success>
</RelationalExpression>
<EqualityOperator>
<try>;</try>
<fail/>
</EqualityOperator>
<success>1</success>
</EqualityExpression>
<success>1</success>
</Expression>
<success>return</success>
</ReturnStatement>
<success>return</success>
</Statement>
<success>if</success>
</IfStatement>
<success>if</success>
</Statement>
<Statement>
<try>return fibonacci(n - 1) + fibonacci(n - 2);</try>
<IfStatement>
<try>return fibonacci(n - 1) + fibonacci(n - 2);</try>
<fail/>
</IfStatement>
<WhileStatement>
<try>return fibonacci(n - 1) + fibonacci(n - 2);</try>
<fail/>
</WhileStatement>
<ReturnStatement>
<try>return fibonacci(n - 1) + fibonacci(n - 2);</try>
<Expression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<EqualityExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<RelationalExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<AdditiveExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<MultiplicativeExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<UnaryExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<UnaryOperator>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<PrimaryExpression>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<Literal>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<BooleanLiteral>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<fail/>
</IntegerLiteral>
<fail/>
</Literal>
<Identifier>
<try>fibonacci(n - 1) + fibonacci(n - 2);</try>
<success>fibonacci</success>
</Identifier>
<success>fibonacci</success>
</PrimaryExpression>
<ExpressionList>
<try>n - 1) + fibonacci(n - 2);</try>
<Expression>
<try>n - 1) + fibonacci(n - 2);</try>
<EqualityExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<RelationalExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<AdditiveExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<MultiplicativeExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<UnaryExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<UnaryOperator>
<try>n - 1) + fibonacci(n - 2);</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<PrimaryExpression>
<try>n - 1) + fibonacci(n - 2);</try>
<Literal>
<try>n - 1) + fibonacci(n - 2);</try>
<BooleanLiteral>
<try>n - 1) + fibonacci(n - 2);</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>n - 1) + fibonacci(n - 2);</try>
<fail/>
</IntegerLiteral>
<fail/>
</Literal>
<Identifier>
<try>n - 1) + fibonacci(n - 2);</try>
<success>n</success>
</Identifier>
<success>n</success>
</PrimaryExpression>
<success>n</success>
</PostfixExpression>
<success>n</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>- 1) + fibonacci(n - 2);</try>
<fail/>
</MultiplicativeOperator>
<success>n</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>- 1) + fibonacci(n - 2);</try>
<success>-</success>
</AdditiveOperator>
<MultiplicativeExpression>
<try>1) + fibonacci(n - 2);</try>
<UnaryExpression>
<try>1) + fibonacci(n - 2);</try>
<UnaryOperator>
<try>1) + fibonacci(n - 2);</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>1) + fibonacci(n - 2);</try>
<PrimaryExpression>
<try>1) + fibonacci(n - 2);</try>
<Literal>
<try>1) + fibonacci(n - 2);</try>
<BooleanLiteral>
<try>1) + fibonacci(n - 2);</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>1) + fibonacci(n - 2);</try>
<success>1</success>
</IntegerLiteral>
<success>1</success>
</Literal>
<success>1</success>
</PrimaryExpression>
<success>1</success>
</PostfixExpression>
<success>1</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>) + fibonacci(n - 2);</try>
<fail/>
</MultiplicativeOperator>
<success>1</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>) + fibonacci(n - 2);</try>
<fail/>
</AdditiveOperator>
<success>n</success>
</AdditiveExpression>
<RelationalOperator>
<try>) + fibonacci(n - 2);</try>
<fail/>
</RelationalOperator>
<success>n</success>
</RelationalExpression>
<EqualityOperator>
<try>) + fibonacci(n - 2);</try>
<fail/>
</EqualityOperator>
<success>n</success>
</EqualityExpression>
<success>n</success>
</Expression>
<success>n</success>
</ExpressionList>
<success>fibonacci</success>
</PostfixExpression>
<success>fibonacci</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>+ fibonacci(n - 2);</try>
<fail/>
</MultiplicativeOperator>
<success>fibonacci</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>+ fibonacci(n - 2);</try>
<success>+</success>
</AdditiveOperator>
<MultiplicativeExpression>
<try>fibonacci(n - 2);</try>
<UnaryExpression>
<try>fibonacci(n - 2);</try>
<UnaryOperator>
<try>fibonacci(n - 2);</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>fibonacci(n - 2);</try>
<PrimaryExpression>
<try>fibonacci(n - 2);</try>
<Literal>
<try>fibonacci(n - 2);</try>
<BooleanLiteral>
<try>fibonacci(n - 2);</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>fibonacci(n - 2);</try>
<fail/>
</IntegerLiteral>
<fail/>
</Literal>
<Identifier>
<try>fibonacci(n - 2);</try>
<success>fibonacci</success>
</Identifier>
<success>fibonacci</success>
</PrimaryExpression>
<ExpressionList>
<try>n - 2);</try>
<Expression>
<try>n - 2);</try>
<EqualityExpression>
<try>n - 2);</try>
<RelationalExpression>
<try>n - 2);</try>
<AdditiveExpression>
<try>n - 2);</try>
<MultiplicativeExpression>
<try>n - 2);</try>
<UnaryExpression>
<try>n - 2);</try>
<UnaryOperator>
<try>n - 2);</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>n - 2);</try>
<PrimaryExpression>
<try>n - 2);</try>
<Literal>
<try>n - 2);</try>
<BooleanLiteral>
<try>n - 2);</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>n - 2);</try>
<fail/>
</IntegerLiteral>
<fail/>
</Literal>
<Identifier>
<try>n - 2);</try>
<success>n</success>
</Identifier>
<success>n</success>
</PrimaryExpression>
<success>n</success>
</PostfixExpression>
<success>n</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>- 2);</try>
<fail/>
</MultiplicativeOperator>
<success>n</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>- 2);</try>
<success>-</success>
</AdditiveOperator>
<MultiplicativeExpression>
<try>2);</try>
<UnaryExpression>
<try>2);</try>
<UnaryOperator>
<try>2);</try>
<fail/>
</UnaryOperator>
<PostfixExpression>
<try>2);</try>
<PrimaryExpression>
<try>2);</try>
<Literal>
<try>2);</try>
<BooleanLiteral>
<try>2);</try>
<fail/>
</BooleanLiteral>
<IntegerLiteral>
<try>2);</try>
<success>2</success>
</IntegerLiteral>
<success>2</success>
</Literal>
<success>2</success>
</PrimaryExpression>
<success>2</success>
</PostfixExpression>
<success>2</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>);</try>
<fail/>
</MultiplicativeOperator>
<success>2</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>);</try>
<fail/>
</AdditiveOperator>
<success>n</success>
</AdditiveExpression>
<RelationalOperator>
<try>);</try>
<fail/>
</RelationalOperator>
<success>n</success>
</RelationalExpression>
<EqualityOperator>
<try>);</try>
<fail/>
</EqualityOperator>
<success>n</success>
</EqualityExpression>
<success>n</success>
</Expression>
<success>n</success>
</ExpressionList>
<success>fibonacci</success>
</PostfixExpression>
<success>fibonacci</success>
</UnaryExpression>
<MultiplicativeOperator>
<try>;</try>
<fail/>
</MultiplicativeOperator>
<success>fibonacci</success>
</MultiplicativeExpression>
<AdditiveOperator>
<try>;</try>
<fail/>
</AdditiveOperator>
<success>fibonacci</success>
</AdditiveExpression>
<RelationalOperator>
<try>;</try>
<fail/>
</RelationalOperator>
<success>fibonacci</success>
</RelationalExpression>
<EqualityOperator>
<try>;</try>
<fail/>
</EqualityOperator>
<success>fibonacci</success>
</EqualityExpression>
<success>fibonacci</success>
</Expression>
<success>return</success>
</ReturnStatement>
<success>return</success>
</Statement>
<Statement>
<try>}</try>
<IfStatement>
<try>}</try>
<fail/>
</IfStatement>
<WhileStatement>
<try>}</try>
<fail/>
</WhileStatement>
<ReturnStatement>
<try>}</try>
<fail/>
</ReturnStatement>
<CompoundStatement>
<try>}</try>
<fail/>
</CompoundStatement>
<ConstructionStatement>
<try>}</try>
<Type>
<try>}</try>
<fail/>
</Type>
<fail/>
</ConstructionStatement>
<AssignmentStatement>
<try>}</try>
<Identifier>
<try>}</try>
<fail/>
</Identifier>
<fail/>
</AssignmentStatement>
<fail/>
</Statement>
<success>{</success>
</CompoundStatement>
<success>int</success>
</Function>
<Function>
<try></try>
<Type>
<try></try>
<fail/>
</Type>
<fail/>
</Function>
<success>int</success>
</SourceFile>
</parse>