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|