=================================================================== RCS file: /home/cvs/OpenXM/src/ox_math/documents/Attic/bnf,v retrieving revision 1.2 retrieving revision 1.3 diff -u -p -r1.2 -r1.3 --- OpenXM/src/ox_math/documents/Attic/bnf 1999/11/02 06:12:00 1.2 +++ OpenXM/src/ox_math/documents/Attic/bnf 1999/11/02 19:02:29 1.3 @@ -1,56 +1,97 @@ -## $OpenXM$ +$OpenXM: OpenXM/src/ox_math/documents/bnf,v 1.2 1999/11/02 06:12:00 ohara Exp $ トークンの集合:: -トークンは "(", ")", ",", "\n" の4つか、あるいはTOKEN(...) である。 -TOKEN(...)の定義は parse.h にある。 +トークンは ( ) , \n の4つか、あるいは「大文字で表された文法記号」である。 +「大文字で表された文法記号」の定義は parse.h の TOKEN(...) あるいは T_... +による。 文法規則:: 省略記法を許すのはフラグが立っているときだけ。 開始記号は 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 -> '(' TOKEN(OX_COMMAND) ',' sm ')' - | '(' TOKEN(OX_DATA) ',' cmo ')' +ox + -> ( OX_COMMAND , sm ) + | ( OX_DATA , cmo ) -sm -> '(' TOKEN(SM_COMMAND) ')' +sm + -> ( SM_COMMAND ) -cmo -> '(' cmo_int32 ')' - | '(' cmo_string ')' - | '(' cmo_list ')' +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 ) -cmo_null -> TOKEN(CMO_NULL) +cmo_null + -> CMO_NULL -cmo_int32 -> TOKEN(CMO_INT32 ) ',' T_INTEGER +cmo_int32 + -> CMO_INT32 , INTEGER -cmo_string -> TOKEN(CMO_STRING) ',' T_INTEGER ',' T_STRING - | TOKEN(CMO_STRING) ',' T_STRING /* 省略記法 */ +cmo_string + -> CMO_STRING , INTEGER , STRING + | CMO_STRING , STRING + # 省略記法 -cmo_mathcap -> TOKEN(CMO_MATHCAP) ',' cmo +cmo_mathcap + -> CMO_MATHCAP , cmo -cmo_list -> TOKEN(CMO_LIST) ',' T_INTEGER /* 空リスト */ - | TOKEN(CMO_LIST) ',' T_INTEGER ',' list_of_cmo - | list_of_cmo /* 省略記法 */ +cmo_list + -> CMO_LIST , INTEGER { , cmo }* + | CMO_LIST { , cmo }* + # 省略記法 -list_of_cmo -> cmo ',' list_of_cmo - | /* 空リストも許す. */ +cmo_monomial32 + -> CMO_MONOMIAL32 , INTEGER { , INTEGER }* , coef -cmo_monomial32 -> TOKEN(CMO_MONOMIAL32) ',' T_INTEGER ',' list_of_int ',' cmo +cmo_zz + -> CMO_ZZ , INTEGER { , INTEGER }* + | CMO_ZZ , INTEGER + # 省略記法 -cmo_zz -> TOKEN(CMO_ZZ) ',' T_INTEGER ',' list_of_int - | TOKEN(CMO_ZZ) ',' T_INTEGER /* 省略記法 */ +cmo_zero + -> CMO_ZERO -list_of_int -> T_INTEGER ',' list_of_int - | T_INTEGER +cmo_dms_generic + -> CMO_DMS_GENERIC -cmo_zero -> TOKEN(CMO_ZERO) +cmo_ring_by_name + -> CMO_RING_BY_NAME , ( cmo_string ) -cmo_dms_generic -> TOKEN(CMO_DMS_GENERIC) +cmo_distributed_polynomial + -> CMO_DISTRIBUTED_POLYNOMIAL , INTEGER , ringdefinition { , monomial }* + # リストの各要素は monomial である. 空リストの場合もOK? + | CMO_DISTRIBUTED_POLYNOMIAL , ringdefinition { , monomial }* + # 省略記法 -cmo_ring_by_name -> TOKEN(CMO_MATHCAP) ',' cmo /* ただし cmo_string でなければならない */ +cmo_error2 + -> CMO_ERROR2 , cmo -cmo_error2 -> TOKEN(CMO_ERROR2) ',' cmo \ No newline at end of file +monomial + -> ( cmo_zero ) + | ( cmo_monomial32 ) + +ringdefinition + -> ( cmo_dms_generic ) + | ( cmo_ring_by_name ) + +coef + -> ( cmo_zz ) + | ( cmo_int32 ) \ No newline at end of file