[Protra-commit] [472] return/break/ continueを最適化する。#31576

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2013年 6月 27日 (木) 00:26:50 JST


Revision: 472
          http://sourceforge.jp/projects/protra/scm/svn/commits/472
Author:   panacoran
Date:     2013-06-27 00:26:49 +0900 (Thu, 27 Jun 2013)
Log Message:
-----------
	return/break/continueを最適化する。#31576
	式のノードの親クラスをExpressionNodeに。子ノードをExpressionNodeに。ExecuteをEvaluateに変更する。
	文のノードの親クラスをExecutableNodeに。Executeの返値をResult列挙体にしてreturn/break/continueの効果を伝搬させる。
	* Protra.Lib/Lang/ArithmeticExpressionNode.cs (ArithmeticExpressionNode): 式のノードの変更。
	* Protra.Lib/Lang/ArithmeticTermNode.cs (ArithmeticTermNode): 同上。
	* Protra.Lib/Lang/ArrayNode.cs (ArrayNode): 同上。
	* Protra.Lib/Lang/AssignmentNode.cs (AssignmentNode): ExpressionNodeから改名。式のノードの変更。
	* Protra.Lib/Lang/BreakStatementNode.cs (BreakStatementNode): 文のノードの変更。
	(BreakStatementNode.Execute): Result.Breakを返す。Tokenをリソースに設定する。
	(BreakStatementExecutedException): 削除。
	* Protra.Lib/Lang/ComparisonNode.cs (ComparisonNode): 式のノードの変更。
	* Protra.Lib/Lang/ContinueStatementNode.cs (ContinueStatementNode): 文のノードの変更。
	(ContinueStatementNode.Execute): Result.Continueを返す。Tokenをリソースに設定する。
	(ContinueStatementExecutedException): 削除。
	* Protra.Lib/Lang/EmptyStatementNode.cs (EmptyStatementNode): 文のノードの変更。
	(EmptyStatementNode.Execute): Result.Normalを返す。
	* Protra.Lib/Lang/EquivalenceComparisonNode.cs (EquivalenceComparisonNode): 式のノードの変更。
	* Protra.Lib/Lang/ExecutableNode.cs (Result): 新規。文の実行結果を表す列挙体。
	(ExecutableNode): 新規。実行可能なノードを表すクラス。
	* Protra.Lib/Lang/ExpressionNode.cs (ExpressionNode): 中身をAssignmentNodeに移して式のノードの親クラスにする。
	(ExpressionNode.Execute): 実行されたらNotImplementedExceptionを投げる。
	* Protra.Lib/Lang/ExpressionStatementNode.cs (ExpressionStatementNode): 文のノードの変更。式を子ノードにする。
	(ExpressionStatementNode.Parse): 自分を返す。
	(ExpressionStatementNode.Execute): 子ノードを評価してResult.Normalを返す。
	* Protra.Lib/Lang/FunctionDefinitionNode.cs (FunctionDefinitionNode): 文のノードの変更。本体をExecutableNodeのリストに変更。
	(FunctionDefinitionNode.Execute): Result.Normalを返す。
	* Protra.Lib/Lang/FunctionNode.cs (FunctionNode): 式のノードの変更。
	(FunctionNode.Evaluate): 文がResult.Returnを返したら実行を中断してリソース中の返値を返す。continue/breakが実行されたらエラーにする。#31577 エラーのトークンをcontine/breakの位置にする。
	* Protra.Lib/Lang/IfStatementNode.cs (IfStatementNode): 文のノードの変更。
	(IfStatementNode.Execute): Result.Normal以外を返す文があったら実行を中断する。
	* Protra.Lib/Lang/Interpreter.cs (Interpreter): 子をProgramNodeに。
	(Interpreter.Execute): 返値をなくす。
	* Protra.Lib/Lang/LiteralNode.cs (LiteralNode): 式のノードの変更。
	* Protra.Lib/Lang/LogicalExpressionNode.cs (LogicalExpressionNode): 同上。
	* Protra.Lib/Lang/LogicalTermNode.cs (LogicalTermNode): 同上。
	* Protra.Lib/Lang/Node.cs: 削除。
	* Protra.Lib/Lang/PrefixedExpressionNode.cs (PrefixedExpressionNode): 同上。
	* Protra.Lib/Lang/PrimaryNode.cs (PrimaryNode): 同上。
	* Protra.Lib/Lang/ProgramNode.cs (ProgramNode): 文のノードの変更。
	(ProgramNode.Execute): 文がResult.Returnを返したら実行を中断。break/continueのエラーのトークンをcontine/breakの位置にする。#31578
	* Protra.Lib/Lang/Resource.cs (Resource.ReturnValue): 新規。returnの返値を取得または設定する。
	(Resource.Token): 新規。return/break/continueに対応する字句を取得または設定する。#31578
	* Protra.Lib/Lang/ReturnStatementNode.cs (ReturnStatementNode): 文のノードの変更。
	(ReturnStatementNode.Execute): 返値を評価してリソースに設定する。Tokenをリソースに設定する。
	(ReturnStatementExecutedException): 削除。
	* Protra.Lib/Lang/StatementNode.cs (StatementNode): 文のノードの変更。
	(StatementNode.Execute): 実行されたらNotImplementedExceptionを投げる。
	* Protra.Lib/Lang/SuffixedExpressionNode.cs (SuffixedExpressionNode): 式のノードの変更。
	* Protra.Lib/Lang/VariableNode.cs (VariableNode): 同上。
	* Protra.Lib/Lang/WhileStatementNode.cs (WhileStatementNode): 文のノードの変更。
	(WhileStatementNode.Execute): 文の実行結果に応じて適切に対応する。
	* Protra.Lib/Protra.Lib.csproj: AssignmentNode.cs、ExecutableNode.csの追加。Node.csの削除。

Ticket Links:
------------
    http://sourceforge.jp/projects/protra/tracker/detail/31576
    http://sourceforge.jp/projects/protra/tracker/detail/31577
    http://sourceforge.jp/projects/protra/tracker/detail/31578
    http://sourceforge.jp/projects/protra/tracker/detail/31578

Modified Paths:
--------------
    protra/trunk/ChangeLog.txt
    protra/trunk/Protra.Lib/Lang/ArithmeticExpressionNode.cs
    protra/trunk/Protra.Lib/Lang/ArithmeticTermNode.cs
    protra/trunk/Protra.Lib/Lang/ArrayNode.cs
    protra/trunk/Protra.Lib/Lang/BreakStatementNode.cs
    protra/trunk/Protra.Lib/Lang/ComparisonNode.cs
    protra/trunk/Protra.Lib/Lang/ContinueStatementNode.cs
    protra/trunk/Protra.Lib/Lang/EmptyStatementNode.cs
    protra/trunk/Protra.Lib/Lang/EquivalenceComparisonNode.cs
    protra/trunk/Protra.Lib/Lang/ExpressionNode.cs
    protra/trunk/Protra.Lib/Lang/ExpressionStatementNode.cs
    protra/trunk/Protra.Lib/Lang/FunctionDefinitionNode.cs
    protra/trunk/Protra.Lib/Lang/FunctionNode.cs
    protra/trunk/Protra.Lib/Lang/IfStatementNode.cs
    protra/trunk/Protra.Lib/Lang/Interpreter.cs
    protra/trunk/Protra.Lib/Lang/LiteralNode.cs
    protra/trunk/Protra.Lib/Lang/LogicalExpressionNode.cs
    protra/trunk/Protra.Lib/Lang/LogicalTermNode.cs
    protra/trunk/Protra.Lib/Lang/PrefixedExpressionNode.cs
    protra/trunk/Protra.Lib/Lang/PrimaryNode.cs
    protra/trunk/Protra.Lib/Lang/ProgramNode.cs
    protra/trunk/Protra.Lib/Lang/Resource.cs
    protra/trunk/Protra.Lib/Lang/ReturnStatementNode.cs
    protra/trunk/Protra.Lib/Lang/StatementNode.cs
    protra/trunk/Protra.Lib/Lang/SuffixedExpressionNode.cs
    protra/trunk/Protra.Lib/Lang/VariableNode.cs
    protra/trunk/Protra.Lib/Lang/WhileStatementNode.cs
    protra/trunk/Protra.Lib/Protra.Lib.csproj

Added Paths:
-----------
    protra/trunk/Protra.Lib/Lang/AssignmentNode.cs
    protra/trunk/Protra.Lib/Lang/ExecutableNode.cs

Removed Paths:
-------------
    protra/trunk/Protra.Lib/Lang/Node.cs




Protra-commit メーリングリストの案内
Back to archive index