Contents

1 Introduction
 1.1 History
 1.2 Why Use ECharts?
2 Developing an ECharts Machine
 2.1 Hello World!
3 What Can ECharts Do?
 3.1 Hierarchical Machines
  3.1.1 Nested Inner Machines
  3.1.2 Nested External Machines
  3.1.3 Reflective Invocation
 3.2 Actions
  3.2.1 Transition Actions
  3.2.2 Entry and Exit Actions
  3.2.3 Action Blocks
 3.3 State Machines
  3.3.1 Or-State Machines
  3.3.2 And-State Machines
  3.3.3 Mixed-State Machines
  3.3.4 Machine Constructors
 3.4 Transitions
  3.4.1 Multi-Level Transitions
  3.4.2 Fork and Join Transitions
  3.4.3 Transition Guards
 3.5 Receiving a Message
 3.6 Non-Blocking Execution
 3.7 ‘*’ Transitions
 3.8 Sending a Message
 3.9 External Ports
  3.9.1 Output Handlers
  3.9.2 Remote Sends
 3.10 Pseudostates
  3.10.1 DEFAULT_INITIAL
  3.10.2 TERMINAL
  3.10.3 DEEP_HISTORY
  3.10.4 NEW
  3.10.5 Summary
 3.11 Machine Arrays
  3.11.1 Implicit Machine Reference
  3.11.2 Explicit Machine Reference
  3.11.3 Related References
 3.12 Timed Transitions
 3.13 Submachine Access
 3.14 Internal Ports
 3.15 Incomplete State References
 3.16 Host Language Interface
 3.17 Machine Serialization
4 The Runtime Model
 4.1 Machine Execution
 4.2 Transition Evaluation
 4.3 Transition Scheduling
 4.4 Port Priorities
 4.5 Transition Priorities
  4.5.1 Message Class Rule
  4.5.2 Source Coverage Rule
  4.5.3 Transition Depth Rule
 4.6 Message Dequeuing
  4.6.1 Explicit Message Consumption
  4.6.2 Implicit Message Deferral
 4.7 Machine Lifecycle
  4.7.1 Machine Creation
  4.7.2 Machine Destruction
 4.8 Shared Data
  4.8.1 Guard Variables
  4.8.2 Port Variables
 4.9 Machine and State Access Modifiers
5 The Machine Runtime
 5.1 Initialization
 5.2 Properties File
 5.3 Startup Messages
 5.4 Transition Timer Manager
 5.5 Monitoring and Logging
  5.5.1 Monitors
  5.5.2 Events
  5.5.3 putEvent()
  5.5.4 Event Filters
  5.5.5 Formatters and Logging
 5.6 Debugging
  5.6.1 Output Format
  5.6.2 Message Properties
  5.6.3 Options
  5.6.4 Global State Output
 5.7 Options Summary
6 Generating Diagrams
 6.1 Page Diagrams
 6.2 Embedded Diagrams
 6.3 Customizing the Layout
  6.3.1 Overriding dot Layout
  6.3.2 Overriding ech2dot Layout
 6.4 dot Layout Bugs
7 Generating Documentation
 7.1 Interacting with Diagrams
 7.2 ech2doc
 7.3 ech2javadoc
 7.4 SVG Viewers
8 Command Reference
 8.1 Machine Dependencies
 8.2 ECHARTSPATH
 8.3 ech2java
 8.4 ech2dot
 8.5 ech2doc
 8.6 ech2javadoc
 8.7 javadocpp
9 Roadmap
 9.1 Exception Handling
 9.2 Machine Inheritance
 9.3 Machine Variables
A Building and Using ECharts
 A.1 Software Requirements
 A.2 Building ECharts
 A.3 Using ECharts
  A.3.1 Direct Invocation
  A.3.2 Indirect Invocation
B Licenses
 B.1 Common Public License v1.0
 B.2 ANTLR 2 License
Bibliography