[Versa] EBNF (start)

Michael Olson Mike.Olson at fourthought.com
Thu Sep 15 10:19:51 MDT 2005


I haven't finished up all of the terminals yet, but do have the start  
of all of the different expressions.  Thought I would get it out for  
early review.

I added some "symbols" because I think it will make parsing easier, but  
let me know if you don't like something.

My intent is that "pattern" is a bit different then just the constants  
that we have definied.  I'd like to see some stuff in pattern like

*:foo

to match a foo in any namespace or

"foo"@*

to match a foo string in any language.

And I am working on resolving those now.

Mike



[1] versa-query ::= declaration-list? query

[2] declaration-list ::= declaration ';' declaration-list ?

[3] declaration ::= variable-declaration
                     | function-declaration
                     | prefix-declarion
                     | context-declaration

[4] variable-declaration ::= "@variable" qname '=' query

[5] function-declaration  ::= "@function" qname '(' ( qname ( ',' qname  
) * ) * ')' = query-expression

[6] prefix-declaration  ::= "@prefix" prefix '=' uriref

[7] context-declaration  ::= "@context" qname '=' query

[8] query ::= context-reference? query-expression

[9] context-reference ::= '{' qname '}'

[10] query-expression ::= '(' query-expression ')'
                         | query-expression slice_operator
                         | traversal
                         | filter
                         | function-call

[11] slice-operator ::= '[' (signed-number | (signed-number ':') | (':'  
signed-number) | (signed-number ':' signed-number)

[12] traversal ::= forward-traversal | backward-traversal

[13] filter ::= forward-filter | backward-filter

[14] forward-traversal ::= (pattern-expression "-" pattern-expression  
"->" filter-expression)
                            | ( '[' '-' pattern-expression "->"  
filter-expression ']' )

[15] forward-filter ::= (pattern-expression "|-" pattern-expression  
"->" filter-expression)
                         | ( '[' "|-" pattern-expression "->"  
filter-expression ']' )

[16] backward-traversal ::= (filter-expression "<-" pattern-expression  
"-" pattern-expression)
                             | ( '[' filter-expression "<-"  
pattern-expression "-" ']' )

[17] backward-filter ::= (filter-expression "<-" pattern-expression  
"-|" pattern-expression )
                          | ( '[' filter-expression "<-"  
pattern-expression "-|" ']' )

[18] pattern-expression ::= pattern-expression slice-operator
                             | '(' pattern-expression ')'
                             | pattern
                             | variable-reference
                             | '{' query '}'


[20] filter-expression ::= '(' filter-expression ')'
                            | filter-expression slice-operator
                            | function-call
                            | anonymous-function-call
                            | pattern
                            | operator-expression
                            | variable-reference


[21] function_call ::= qname '(' ( argument-expression ( ','  
argument-expression ) * ) ? ')'

[23] argument-expression ::= argument-expression slice-operator
                              | '(' argument-expression ')'
                              | filter
                              | traverse
                              | pattern
                              | function-call
                              | anonymous-function-call
                              | variable-reference

[24] operator-expression  ::= operator-expression? operator  
filter-expression


[25] pattern  ::= node-pattern | literal-pattern | particle





------------------------------------------------------------------------ 
-----------------
Mike Olson                                                Principal  
Consultant
mike.olson at fourthought.com                +1 720 253 4662
Fourthought, Inc.                                       
http://Fourthought.com
PO Box 270590,                                       http://4Suite.org
Louisville, CO 80027-5009, USA
XML strategy, XML tools, knowledge management



More information about the Versa mailing list