Def
===

The 'def' is where colm realy shines.
A 'def' is somewhere between a struct and a regular expression.
Again one example is much more clearer.

[source,chapel]
.assign.lm
----
lex start
	token id / ('a' .. 'z' | 'A' .. 'Z' ) + /
	token value / ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )+ /
	literal `= `;
	ignore / [ \t\n] /
end

def assignment
	[ id `=  value `;]

	
def assignment_list
	[assignment assignment_list]
|	[assignment]
|	[]

parse Simple: assignment_list[ stdin ]

for I:assignment in Simple {
	print( I.id, "->", I.value, "\n" )
}
----

After the compilation we can pipe some input to it's stdin.

[source,bash]
----
/opt/colm/bin/colm assign.lm
echo -e 'b=3;a=1;\n c=2;' |./assign
----

This gives us:

----
b->3
a->1
c->2
----

NOTE: this also illustrates how to read from 'stdin'.
