NorKen Technologies, Inc.


Home Page of NorKen Technologies, Inc. Information About NorKen Technologies, Inc. Information About NorKen Technologies' Products Information About NorKen Technologies' Services Information About Ordering NorKen Technologies' Products How to Contact NorKen Technologies


FAQs



Free Trial

Order



Downloads

Grammars




































































































































































































JavaScript Parser Example

// =================================================================
// ProGrammar Grammar Definition File
// -----------------------------------------------------------------
//
//  JavaScript.GDL - grammar for parsing JavaScript 1.2
//
//  This example is intended for demonstration purposes only.
//
//  (c) Copyright 1999, 2000 NorKen Technologies, Inc.
//  All rights reserved.
//
// ==================================================================

grammar JavaScript 
{
	statements ::=
		{statement};
		
	block ::=
		"{" statements "}";
	
	statement ::=
		(  break_stmt		// navigator 2.0
		| continue_stmt		// navigator 2.0
		| delete_stmt		// navigator 4.0
		| do_while_stmt		// navigator 4.0
		| export_stmt		// navigator 4.0
		| for_stmt			// navigator 2.0
		| for_in_stmt		// navigator 2.0
		| function_stmt		// navigator 2.0
		| if_else_stmt		// navigator 2.0
		| import_stmt		// navigator 4.0
		| labeled_stmt		// navigator 4.0
		| return_stmt		// navigator 2.0
		| switch_stmt		// navigator 4.0
		| variable_stmt		// navigator 2.0
		| while_stmt		// navigator 2.0
		| with_stmt		// navigator 2.0
		| block
		| expression ) [";"]
		;
		
	break_stmt ::=
		"break" [label];

	continue_stmt ::=
		"continue" [label];

	delete_stmt ::=
		"delete" qualified_name [subscript];

	do_while_stmt ::=
		"do" statement
		"while" "(" condition ")" ;

	export_stmt ::=
		"export"
		("*" | {qualified_name, ","});		

	for_stmt ::=
		"for" "(" [initial_expression ";"] 
		  [condition ";"] 
		  [increment_expression] ")"
	statement;

	initial_expression ::=
		  variable_stmt
		| expression_list ;

	increment_expression ::=
		expression_list ;

	for_in_stmt ::=
		"for" "(" variable "in" object ")"
		statement;

	function_stmt ::=
		"function" name
		"(" [params] ")"
		block;

	params ::=
		{ident, ","};
		
	if_else_stmt ::=
		"if" "(" condition ")"
			statement1
		["else" statement2] ;
		
	statement1 ::=
		statement;
		
	statement2 ::=
		statement;

	import_stmt ::=
		"import" 
		(name "." "*"
		 | {qualified_name, ","});

	labeled_stmt ::=
		label ":" statement ;

	return_stmt ::=
		"return" expression;

	switch_stmt ::=
		"switch" "(" expression ")"
		"{" 
			[{ case_part }]
			[default_part]
		"}" ;

	case_part ::=
		"case" label ":" statements;

	default_part ::=
		"default" ":" statements;

	variable_stmt ::=
		"var" {var_decl, ","};
		
	var_decl ::=
		name ["=" value];

	while_stmt ::=
		"while" "(" condition ")"
		statement;

	with_stmt ::=
		"with" "(" object ")" 
		statement;

		
	value ::=
		expression;
		
	name ::=
		ident;
		
	variable ::=
		qualified_name;
	
	object ::=
		qualified_name;
		
	condition ::= 
		expression;

	subscript ::=
		"[" index "]";
		
	index ::= numeric;		
		
	qualified_name ::=
		{ident, "."};
	
	label ::=
		ident;

	// -------------------------------------------------------------------
	//
	// 				EXPRESSIONS
	//
	// -------------------------------------------------------------------

	// the following rules establish operator precedence
	// (increasing precedence for each successive rule)
	
	expression ::= 
		assign_term;

	assign_term ::= { ternary_term, assign_level_op };  
		// assignment is lowest precedence

	ternary_term ::= or_term ["?" expression ":" expression];

	or_term     ::= { and_term,  	or_level_op  };
	and_term    ::= { bit_term, 	and_level_op  };
	bit_term 	::= { cmp_term,  	bit_level_op };
	cmp_term    ::= { shift_term, cmp_level_op };
	shift_term	::= { add_term,  	shift_level_op  };
	add_term    ::= { mult_term, 	add_level_op };
	mult_term   ::= { factor, 	mult_level_op };

	factor ::= 
		  "!" expression
		| "(" expression ")" ["." reference]
		| unary_op expression
		| creating_expression
		| literal_expression
		| [prefix_op] reference [postfix_op]
		;

	// operators
	assign_level_op ::= ("=" | "*=" | "/=" | "%=" | "+=" | "-="
			    | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|=");
	or_level_op  	::= "||";
	and_level_op 	::= "&&" ;
	bit_level_op 	::= "|" | "^" | "&";
	cmp_level_op 	::= "==" | "!=" | "<" | ">" | ">=" | "<=";
	shift_level_op 	::= ">>>" | ">>" | "<<";
	add_level_op 	::= "+" | "-";
	mult_level_op 	::= "/" | "*" | "%";
	unary_op 	::= "-" | "~" | "+";
	prefix_op	::= "++" | "--";
	postfix_op	::= "++" | "--";

	expression_list ::=
		{expression, ","};
		
	reference ::= 
		{reference_term, "."};

	reference_term ::= 
		ident [{ "[" expression "]" | "(" [argument_list] ")" }];

	argument_list ::= {expression, ","};

	creating_expression ::= 
		"new" 
		( qualified_name "(" [argument_list] ")" 
		  | ["[" expression "]"] ["[""]"] 
		  	["=" value]
		  | "(" expression ")" )
		;

	literal_expression ::=  
		  numeric_literal 
		| string 
		| character
		;
		
	ident ::= 
		^keyword identifier;

	keyword ::=
		  "break"
		| "continue"
		| "delete"
		| "do"
		| "while"
		| "export"
		| "for"
		| "in"
		| "function"
		| "if"
		| "else"
		| "import"
		| "return"
		| "switch"
		| "case"
		| "default"
		| "var"
		| "while"
		| "with"
		| "new"
		;
		
	numeric_literal ::=
		  '0[xX][0-9a-fA-F]+'		// hex constant
		| (numeric ["." numeric] | "." numeric)
		     [exponent_part][float_type_suffix]
		;

	exponent_part 	::= "e" ("+" | "-") numeric;
	float_type_suffix ::= "f" | "d";

	string ::= quotedstring;

	character ::= 
		"\'" 
			["\\"] ( numeric | '.' )
		"\'";
		
	// this example uses the SPACE attribute to skip comments in 
	// the Java file
	space_symbol  ::= 
		{ ( "\32" | "\r" |"\n"|"\t")
			| "//" *("\n") 
			|  "/*" *("*/") "*/",,0 };
};






For comments or questions about this site, please contact
webmaster@programmar.com
Copyright © 1998-2008 NorKen Technologies, Inc. All rights reserved.