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