CYACC.H

[目次 | 型・クラス・構造体 | マクロ]

目次

型・クラス・構造体一覧

マクロ一覧


   1|/**************************************************************************
   2|  1. <<< 簡易構文解析 (CYacc) >>> 
   3|***************************************************************************/
   4|
   5|#ifndef __CYACC_H
   6|#define __CYACC_H
   7|
   8| 
   9|/*************************************************************************
  10|  2. <<< モジュール設定・優先ヘッダ >>> 
  11|**************************************************************************/
  12|#ifndef USES_PRIORITY_HEADER
  13|/*[START_OF_PRIORITY_HEADER]*/
  14|
  15|#define  USES_CYACC
  16|typedef  struct _CYacc  CYacc;
  17|
  18|typedef  int  (*CYacc_OnMatchedF)( CYacc_Token* firstToken, int nToken );
  19|
  20|/*[END_OF_PRIORITY_HEADER]*/
  21|#endif
  22|
  23|/* 派生属性の設定 */
  24|#if defined(CYACC_SOME)
  25|  #define  CYACC_OTHER
  26|#endif
  27| 
  28|/*************************************************************************
  29|  3. <<< エラーコード, リターンコード >>> 
  30|**************************************************************************/
  31|
  32|#define  CYacc_Err_Some     0
  33|
  34| 
  35|/*--------------------------------------------------------------*/
  36|/*4. <<< Interface Area -------------------------------------- >>> */ 
  37|/*--------------------------------------------------------------*/
  38|
  39|#ifdef __cplusplus
  40|extern "C" {
  41|#endif
  42|
  43| 
  44|/**************************************************************************
  45|  5. <<< [CYacc_OnMatchedF] 指定した字句列と一致したときのコールバック関数型 >>> 
  46|【引数】
  47|  ・CYacc_Token*  firstToken;  一致した字句列の先頭字句
  48|  ・int  nToken;               一致した字句列の字句数
  49|  ・int  返り値                演算結果として格納した字句数
  50|【補足】
  51|・一致した字句列のうち、2番目以降の字句にアクセスするときは、firstToken[n]
  52|  のように記述します。
  53|・返り値は、たとえば次のように決定します。
  54|  字句列が計算式で、コールバック関数がその計算を行うとき、
  55|  firstToken[0] に計算結果を格納し、返り値は 1 にします。
  56|***************************************************************************/
  57|/*(宣言は、優先ヘッダにあります)*/
  58| 
  59|/**************************************************************************
  60|  6. <<< [CYacc] 簡易構文解析 >>> 
  61|【補足】
  62|・(未記入)
  63|***************************************************************************/
  64|struct  _CYacc {
  65|  CYacc_Token  stack[CYacc_nStack];
  66|  int  stack_n;
  67|  int*  opPriority;同じのは?
  68|
  69|  ERRORS_INITCHK_VAR
  70|};
  71|
  72|void  CYacc_init( CYacc* );
  73|void  CYacc_finish( CYacc* );
  74|void  CYacc_print( CYacc*, const char* title );
  75|
  76|void  CYacc_addOnMatchedF( CYacc*, CYacc_OnMatchedF callback );
  77|
  78|CYacc_Token*  CYacc_allocToken( CYacc* );
  79|void  CYacc_pushToken( CYacc*, CYacc_Token* );
  80|void  CYacc_pushFinished( CYacc* );
  81|
  82| 
  83|/**************************************************************************
  84|  7. <<< [CYacc_Token] 字句 >>> 
  85|【補足】
  86|・(未記入)
  87|***************************************************************************/
  88|#define  CYacc_TokenLen  40
  89|
  90|struct CYacc_Token {
  91|  char str[CYacc_TokenLen];
  92|  CYacc_TokenType*  type;
  93|};
  94|
  95| 
  96|/**************************************************************************
  97|  8. <<< [CYacc_TokenType] 字句タイプ >>> 
  98|【補足】
  99|・(未記入)
 100|***************************************************************************/
 101|struct  CYacc_TokenType {
 102|  bool bMatched;  /* CYacc_Formula */
 103|  int  priority;
 104|};
 105|
 106|extern  CYacc_TokenType  CYacc_plus;
 107|
 108| 
 109|/**************************************************************************
 110|  9. <<< [CYacc_Formula] BNF・式 >>> 
 111|【補足】
 112|・(未記入)
 113|***************************************************************************/
 114|struct  CYacc_Formula {
 115|  CYacc_TokenType  formla[];    /* 式、字句タイプ列 */
 116|  int  nMatched[];  /* 一致した字句数の配列 */
 117|};
 118|
 119|
 120|
 121| 
 122|#ifdef __cplusplus
 123|}
 124|#endif
 125|
 126|/*--------------------------------------------------------------*/
 127|/*10. <<< Mapping Area ---------------------------------------- >>> */ 
 128|/*--------------------------------------------------------------*/
 129|
 130| 
 131|#endif  /* __CYACC_H */ 
 132| 
 133|