use tokenlist for lexer parser.
[build-config.git] / src / config / lxrgmr-code / doc / 5.note.md
blobe64eb1f7df4a21dc76d207bfd38bb7c1732f6bbd
7 @ glance code, read the mem-alloc relative part, 
8 @ gmr proc
9 # code-analyze, output lang-elem token txt.
10 # codefmt
11 # code-parser
12
13 @ invoker
14 # binary-code func ivk
15 # sh-script func ivk
16
18 @ ${!var}对!chk,输出envar的token和格式化字符串的subst-token
20 @ token
21 # defined in several pages. one page has 255 token.
22 # vtoken ret from sub tokenlist. tokenlist has an id, and a var with str-name to export.
24 @ codeblock
25 # bracket3n1()中判断paired token,将paired_token_str设置为NULL
26 # {}()是opr-char,而""是嵌套状态的,是pair-char,同样,$产生嵌套,定义在pfx-char当中。
27 # codeblock,envar,string, 三者可嵌套。envar和string中的proc函数需考虑codeblock的flag判断。codeblock切换状态的同时,设置flag。在state嵌套level为0时取消flag。
29 @ /* */ 和 /** **/ 的 cmnt,在/*起始时,对于**/是否输出异常token?
31 @ code-elem
32 # macro-statement
33 + file-include
34 + macro-define
35 + macro-func-define
36 + if/else/endif judgement
37 # type-define
38 # struct-union-enum-define
39 # var-define
40 # declaration
41 # function-define
42 # statement
43 + if-stmt(if/else/elif/fi)
44 + while-stmt(do/while)
45 + for-stmt(for/in/foreach)
46 + switch-stmt(switch/case)
47 + select-stmt(select)
48 + jmp-stmt(break/continue/return/;;)
49 # cmd & bg & redirect & pipe & logic
50 # assignment
51 # invoke
59 envar_assign = {
60     { T_WORD, idx_opr, assign_opr, assign_val },
63 idx_opr = {
64     { NULL },
65     { T_LBRACKET2, idx_token, T_RBRACKET2 },
68 idx_token = {
69     { T_WORD },
70     { T_WORD_QUOTE },
73 assign_opr = {
74     { T_EQUAL },
75     { T_ADDEQUAL },
78 assign_val = {
79     { T_LBRACKET1, array_assign_list, T_RBRACKET1 },
80     { T_WORD },
81     { T_WORD_QUOTE },
84 array_assign_list = {
85     { NULL },
86     { T_WORD },
87     { T_WORD array_assign_list },
93 expr_assign = {
94     { T_WORD, expr_idx_opr, expr_assign_opr, expr_calc },
95     { envar_assign, expr_calc },
98 expr_idx_opr = {
99     { NULL },
100     { T_LBRACKET2, expr_calc, T_LBRACKET2 },
103 expr_val = {
104     { T_WORD },
105     { T_WORD_QUOTE },
106     { T_CONST_DIGIT },
107     { T_CONST_OCT },
108     { T_CONST_HEX },
109     { T_CONST_BIN },
110     { expr_initor },
113 expr_assign_opr = {
114     { assign_opr },
116     { T_ADDEQUAL },
117     { T_SUBEQUAL },
118     { T_MULEQUAL },
119     { T_DIVEQUAL },
120     { T_MODEQUAL },
121     { T_POWEQUAL },
123     { T_ANDEQUAL },
124     { T_OREQUAL },
125     { T_XOREQUAL },
127     { T_LSHIFTEQUAL },
128     { T_RSHIFTEQUAL },
131 expr_var_member = {
132     { T_LBRACKET2, T_CONST_DIGIT, T_RBRACKET2 },
133     { T_WORD, T_LBRACKET2, T_CONST_DIGIT, T_RBRACKET2 },
134     { T_WORD },
137 expr_initor = {
138     { T_LBRACKET3, expr_initor, T_RBRACKET3 },
139     { T_LBRACKET3, expr_initor, T_COMMA, T_RBRACKET3 },
140     { expr_val },
141     { expr_initor, T_COMMA, expr_val },
142     { T_POINT, expr_var_member, T_EQUAL, expr_val },
143     { expr_initor, T_COMMA, T_POINT, expr_var_member, T_EQUAL, expr_val },
146 expr_calc = {
147     { NULL },
148     { expr_val },
150     { T_LBRACKET1, expr_calc, T_RBRACKET1 },
152     { expr_calc, T_ADD, expr_calc },
153     { expr_calc, T_SUB, expr_calc },
154     { expr_calc, T_MUL, expr_calc },
155     { expr_calc, T_DIV, expr_calc },
156     { expr_calc, T_MOD, expr_calc },
157     { expr_calc, T_POW, expr_calc },
159     { T_REVERSE, expr_calc },
160     { expr_calc, T_AND, expr_calc },
161     { expr_calc, T_OR, expr_calc },
162     { expr_calc, T_XOR, expr_calc },
164     { expr_calc, T_LSHIFT, expr_calc },
165     { expr_calc, T_RSHIFT, expr_calc },
167     { T_NOT, expr_calc },
168     { expr_calc, T_DAND, expr_calc },
169     { expr_calc, T_DOR, expr_calc },
171     { expr_calc, T_GT, expr_calc },
172     { expr_calc, T_GE, expr_calc },
173     { expr_calc, T_LT, expr_calc },
174     { expr_calc, T_LE, expr_calc },
176     { T_LBRACKET1, expr_calc, T_RBRACKET1, expr_calc, T_COLON, expr_calc },