/** * * FIPA-SL grammar. * * This is grammar file of: * * FIPA SL Content Language Concrete Syntax * updated according to the document XC00008D * see http://www.fipa.org * * This file is a SL parser source file for SableCC * (Sable Compiler Compiler by Etienne Gagnon and others) * which can be obtained at: http://sourceforge.net/projects/sablecc * This file is used to produce SL parser with related classes * and data structures. * * This is part of the New Zealand Distributed Information Systems (NZDIS) * project, conducted at the University of Otago, Dunedin, New Zealand, * under supervision of Professor Martin Purvis and Doctor Stephen Cranefield. * * * Copyright (C) 1998-2001 Mariusz Nowostawski and others. * All rights reserved. (see LICENSE and AUTHORS files) * * Contact: * e-mail: mariusz@rakiura.org * * This file is part of the nzdis-fipasl package. * * * Version 1.0 $Revision: 1.2 $ */ Package nzdis.lang.fipasl; Helpers tab = 9; cr = 13; lf = 10; eol = cr lf | cr | lf |; white = (' ' | tab | eol)+ ; l_par = '('; r_par = ')'; eq = '='; ineq = '/='; less = '<'; eqless = '=<'; more = '>'; moreeq = '>='; dot = '.'; q_mark = '?'; colon = ':'; hash = '#'; minus = '-'; plus = '+'; star = '*'; percent = '%'; slash = '/'; semicolon = ';'; pipe = '|'; upper = ['A'..'Z']; lower = ['a'..'z']; digit = ['0'..'9']; special = [[[hash + colon] + [minus + q_mark]] + plus]; brackets = [l_par + r_par]; integer = minus? digit (digit)*; float = minus? digit (digit)* '.' digit (digit)* (('E' | 'e') ('+' | '-')? digit (digit)*)?; not = 'not'; and = 'and'; or = 'or'; implies = 'implies'; equiv = 'equiv'; true = 'true'; false = 'false'; member = 'member'; contains = 'contains'; result = 'result'; cons = 'cons'; first = 'first'; rest = 'rest'; nth = 'nth'; append = 'append'; union = 'union'; intersection = 'intersection'; difference = 'difference'; sequence = 'sequence'; set = 'set'; holds = 'holds'; forall = 'forall'; exists = 'exists'; feasible = 'feasible'; done = 'done'; action = 'action'; iota = 'iota'; any = 'any'; all = 'all'; Tokens line_comment = '/' '/' [[0 .. 0xffff] - [cr + lf]]* eol | ';' [[0 .. 0xffff] - [cr + lf]]* eol ; multiline_comment = '/' '*' [[0 .. 0xffff] - ['*' + '/']]* '*' '/' ; string_literal = '"' ([[0 .. 0xffff] - ['"' + '\']] | '\'[0 .. 0xffff])+ '"'; l_par = l_par; r_par = r_par; eq = eq; ineq = ineq; less = less; eqless = eqless; more = more; moreeq = moreeq; q_mark = q_mark; colon = colon; hash = hash; minus = minus; plus = plus; star = star; percent = percent; slash = slash; semicolon = semicolon; pipe = pipe; not = not; and = and; or = or; implies = implies; equiv = equiv; true = true; false = false; member = member; contains = contains; result = result; cons = cons; first = first; rest = rest; nth = nth; append = append; union = union; intersection = intersection; difference = difference; sequence = sequence; set = set; holds = holds; forall = forall; exists = exists; feasible = feasible; done = done; action = action; iota = iota; any = any; all = all; dot = dot; date_time_seperator = 'T'; integer = integer; float = float; word = ( [[[[0 .. 0xffff] - [0 .. 0x20]] - brackets] + [special + digit]] ) ( [[[0 .. 0xffff]- [0 .. 0x20]] - brackets] )*; white = white; Ignored Tokens white, line_comment, multiline_comment; Productions content = l_par content_expression+ r_par; content_expression = {identifying} identifying_expression | {action} action_expression | {proposition} proposition ; proposition = wff; wff = {atomic} atomic_formula | {unary_logical_op} l_par unary_logical_op wff r_par | {binary_logical_op} l_par binary_logical_op [left]:wff [right]:wff r_par | {quantifier} l_par quantifier variable wff r_par ; unary_logical_op = {not} not; binary_logical_op = {and} and | {or} or | {implies} implies | {equiv} equiv; atomic_formula = {proposition_symbol} proposition_symbol | {predicate_symbol} l_par predicate_symbol term+ r_par | {binary_term} l_par binary_term_op [left]:term [right]:term r_par | {true} true | {false} false ; binary_term_op = {eq} eq | {ineq} ineq | {more} more | {moreeq} moreeq | {less} less | {eqless} eqless | {member} member | {contains} contains | {result} result; quantifier = {forall} forall | {exists} exists; term = {variable} variable | {functional} functional_term | {action} action_expression | {identifying} identifying_expression | {constant} constant | {sequence} P.sequence | {set} P.set; identifying_expression = l_par referential_operator term wff r_par; referential_operator = {iota} iota | {any} any | {all} all; functional_term = {cons} l_par cons [left]:term [right]:term r_par | {first} l_par first [right]:term r_par | {rest} l_par rest [right]:term r_par | {nth} l_par nth [left]:term [right]:term r_par | {append} l_par append [left]:term [right]:term r_par | {union} l_par union [left]:term [right]:term r_par | {intersection} l_par intersection [left]:term [right]:term r_par | {difference} l_par difference [left]:term [right]:term r_par | {arithmetic} l_par arithmetic_op [left]:term [right]:term r_par | {f1} l_par function_symbol term* r_par | {f2} l_par function_symbol parameter+ r_par; constant = {numerical} numerical_constant | {string} string | {datetime} datetime; numerical_constant = {integer} integer | {float} float; variable = q_mark string; action_expression = l_par action agent term r_par | {sequence} l_par pipe [left]:action_expression [right]:action_expression r_par | {alternative} l_par semicolon [left]:action_expression [right]:action_expression r_par; proposition_symbol = string; predicate_symbol = string; function_symbol = string; agent = term; sequence = l_par T.sequence term* r_par; set = l_par T.set term* r_par; parameter = parameter_name parameter_value; parameter_value = term; arithmetic_op = {plus} plus | {minus} minus | {multiplication} star | {division} slash | {modulo} percent; string = {word} word | {literal} string_literal; parameter_name = colon string; datetime = [date]:integer date_time_seperator [time]:integer; /* datetime = Year Month Day "T" Hour Minute Second MilliSecond typeDesignator?; Year = DecimalLiteral DecimalLiteral DecimalLiteral DecimalLiteral; Month = DecimalLiteral DecimalLiteral; Day = DecimalLiteral DecimalLiteral; Hour = DecimalLiteral DecimalLiteral; Minute = DecimalLiteral DecimalLiteral; Second = DecimalLiteral DecimalLiteral; MilliSecond = DecimalLiteral DecimalLiteral DecimalLiteral; typeDesignator = ["a" - "z", "A" "Z"]; */
This site has been last updated by the web master
on 2007/6/24.