Index: trunk/lib/Text/FormBuilder/grammar
===================================================================
--- trunk/lib/Text/FormBuilder/grammar	(revision 23)
+++ trunk/lib/Text/FormBuilder/grammar	(revision 24)
@@ -14,4 +14,5 @@
 	$type,
 	@options,
+	$required,
 	$list_var,
 	$size,
@@ -105,4 +106,5 @@
             list     => $list_var,
             validate => $item{'validate(?)'}[0],
+	    required => $required || 0,
 	};
 	
@@ -121,5 +123,8 @@
 	}
 	
+	#warn "field $item{name} is required" if $required;
+	
 	$type = undef;
+	$required = 0;
 	$list_var = undef;
 	$size = undef;
@@ -164,5 +169,5 @@
 list_var: /@[A-Z_]+/ { $list_var = $item[1] }
 
-option: (simple_multiword | quoted_string) display_text(?)
+option: (value | simple_multiword | quoted_string) display_text(?)
     { push @options, { $item[1] => $item{'display_text(?)'}[0] } }
 
@@ -171,5 +176,9 @@
 display_text: '[' /[^\]]+/i ']'    { $item[2] }
 
-validate: '//' value
+validate: '//' (optional_pattern | required_pattern)    { $item[2] }
+
+optional_pattern: /[A-Z_]+/ '?'	{ $required = 0; $item[1] }
+
+required_pattern: /[A-Z_]+/ { $required = 1; $item[1] }
 
 comment: '#' /.*/
