=================================================================== RCS file: /home/cvs/OpenXM/src/ox_math/documents/Attic/bnf,v retrieving revision 1.1 retrieving revision 1.3 diff -u -p -r1.1 -r1.3 --- OpenXM/src/ox_math/documents/Attic/bnf 1999/10/29 08:06:42 1.1 +++ OpenXM/src/ox_math/documents/Attic/bnf 1999/11/02 19:02:29 1.3 @@ -1,42 +1,97 @@ -## $OpenXM$ +$OpenXM: OpenXM/src/ox_math/documents/bnf,v 1.2 1999/11/02 06:12:00 ohara Exp $ トークンの集合:: -トークンの定義は parse.h にある。 -T_ ではじまるマクロがトークンである。 -それ以外のトークンは次の4つ: "(", ")", ",", "\n" +トークンは ( ) , \n の4つか、あるいは「大文字で表された文法記号」である。 +「大文字で表された文法記号」の定義は parse.h の TOKEN(...) あるいは T_... +による。 文法規則:: 省略記法を許すのはフラグが立っているときだけ。 -the start symbol は line である。 +開始記号は line である。 +トークンの境界は空白で分けてある。 +-> | {}* は拡張BNFの記号である。 The following BNFs define the grammer of Common Math Objects: -line -> ox '\n' - | cmo '\n' - | '\n' +line + -> ox \n + | cmo \n + | \n -ox -> '(' T_OX_COMMAND ',' T_SM_COMMAND ')' - | '(' T_OX_DATA ',' cmo ')' +ox + -> ( OX_COMMAND , sm ) + | ( OX_DATA , cmo ) -cmo -> '(' cmo_int32 ')' - | '(' cmo_string ')' - | '(' cmo_list ')' +sm + -> ( SM_COMMAND ) -cmo_list -> T_CMO_LIST ',' T_INTEGER - | T_CMO_LIST ',' T_INTEGER ',' list_of_cmo /* 空リストも許す. */ +cmo + -> ( cmo_null ) + | ( cmo_int32 ) + | ( cmo_string ) + | ( cmo_mathcap ) + | ( cmo_list ) + | ( cmo_zero ) + | ( cmo_zz ) + | ( cmo_monomial32 ) + | ( cmo_dms_generic ) + | ( cmo_ring_by_name ) + | ( cmo_distributed_polynomial ) + | ( cmo_error2 ) -list_of_cmo -> cmo ',' list_of_cmo - | /* 空リストも許す. */ +cmo_null + -> CMO_NULL -cmo_null -> T_CMO_NULL +cmo_int32 + -> CMO_INT32 , INTEGER -cmo_int32 -> T_CMO_INT32 ',' T_INTEGER -cmo_string -> T_CMO_STRING ',' T_INTEGER ',' T_STRING - | T_CMO_STRING ',' T_STRING /* 省略記法 */ +cmo_string + -> CMO_STRING , INTEGER , STRING + | CMO_STRING , STRING + # 省略記法 -cmo_zz -> T_CMO_ZZ ',' T_INTEGER ',' list_of_int - | T_CMO_ZZ ',' T_INTEGER /* 省略記法 */ +cmo_mathcap + -> CMO_MATHCAP , cmo -list_of_int -> T_INTEGER ',' list_of_int - | T_INTEGER +cmo_list + -> CMO_LIST , INTEGER { , cmo }* + | CMO_LIST { , cmo }* + # 省略記法 +cmo_monomial32 + -> CMO_MONOMIAL32 , INTEGER { , INTEGER }* , coef + +cmo_zz + -> CMO_ZZ , INTEGER { , INTEGER }* + | CMO_ZZ , INTEGER + # 省略記法 + +cmo_zero + -> CMO_ZERO + +cmo_dms_generic + -> CMO_DMS_GENERIC + +cmo_ring_by_name + -> CMO_RING_BY_NAME , ( cmo_string ) + +cmo_distributed_polynomial + -> CMO_DISTRIBUTED_POLYNOMIAL , INTEGER , ringdefinition { , monomial }* + # リストの各要素は monomial である. 空リストの場合もOK? + | CMO_DISTRIBUTED_POLYNOMIAL , ringdefinition { , monomial }* + # 省略記法 + +cmo_error2 + -> CMO_ERROR2 , cmo + +monomial + -> ( cmo_zero ) + | ( cmo_monomial32 ) + +ringdefinition + -> ( cmo_dms_generic ) + | ( cmo_ring_by_name ) + +coef + -> ( cmo_zz ) + | ( cmo_int32 ) \ No newline at end of file