Revisão | 01478f7b3711aa3d6e202a8b63fbe000fccad011 (tree) |
---|---|
Hora | 2017-04-04 22:32:21 |
Autor | dhrname <dhrname@user...> |
Commiter | dhrname |
Add the alpha conversation
@@ -1,21 +1,21 @@ | ||
1 | 1 | CC = gcc |
2 | -DEBUGMODE = -O0 -g | |
2 | +DEBUGMODE = -O0 -g -pg | |
3 | 3 | NODEBUGMODE = -O2 |
4 | 4 | all : startest star |
5 | 5 | .PHONY : all |
6 | 6 | |
7 | 7 | star.o: star.c |
8 | - $(CC) -fopenmp -Wall -std=c11 $(NODEBUGMODE) -c star.c | |
8 | + $(CC) -Wall -std=c11 $(NODEBUGMODE) -c star.c | |
9 | 9 | |
10 | 10 | shadowstar.o: shadowstar.c |
11 | - $(CC) -fopenmp -Wall -std=c11 $(NODEBUGMODE) -c shadowstar.c | |
11 | + $(CC) -Wall -std=c11 $(NODEBUGMODE) -c shadowstar.c | |
12 | 12 | |
13 | 13 | star: shadowstar.o star.o |
14 | 14 | $(CC) -Wall -std=c11 $(NODEBUGMODE) -o ../star shadowstar.o star.o |
15 | 15 | |
16 | 16 | |
17 | 17 | startest.o: startest.c |
18 | - $(CC) -fopenmp -Wall -std=c11 $(NODEBUGMODE) -c startest.c | |
18 | + $(CC) -Wall -std=c11 $(NODEBUGMODE) -c startest.c | |
19 | 19 | |
20 | 20 | startest: shadowstar.o startest.o |
21 | 21 | $(CC) -Wall -std=c11 $(NODEBUGMODE) -o ../startest shadowstar.o startest.o |
@@ -292,15 +292,44 @@ ST_Ordered_Pair *ST_tokenize(const int_least8_t *text, ST_Token_Mode *array) | ||
292 | 292 | * 「ARR01-C. 配列のサイズを求めるときに sizeof 演算子をポインタに適用しない」 |
293 | 293 | * http://www.jpcert.or.jp/sc-rules/c-arr01-c.html |
294 | 294 | * 実行処理のみ実装*/ |
295 | +/* 1, λx.x y | |
296 | + * 2, y x.xλ | |
297 | + * 3, 「ワイをエックス」(エックス)*/ | |
295 | 298 | bool ST_parse(ST_Token_Mode *array, size_t length, ST_Ordered_Pair *list) |
296 | 299 | { |
297 | 300 | if (ST_isEmpty(list)) |
298 | 301 | { |
299 | 302 | return false; |
300 | 303 | } |
304 | + | |
305 | + /*衝突しそうな変数は前もってアルファ変換をしておく | |
306 | + * listの値を変更することになるので、テストをすること | |
307 | + * ex: | |
308 | + * λx.λx.x ->α λx.λy.y | |
309 | + * 「「甲」(甲)」(甲) ->α 「「乙」(乙)」(甲) | |
310 | + * あるいは、 | |
311 | + * 「甲」(甲)「甲」(甲) ->α 「乙」(乙)「甲」(甲)*/ | |
312 | + | |
313 | + /*トークンモードの数値*/ | |
314 | + ST_Token_Mode mode = ST_UNKNOWN_TOKEN; | |
315 | + | |
316 | + /*探すべき変数の値*/ | |
317 | + double varcode = 0.0; | |
318 | + | |
319 | + /*リストの現在のヘッダー*/ | |
320 | + ST_Ordered_Pair *head = list; | |
321 | + | |
322 | +#pragma omp parallel for | |
301 | 323 | for (int_fast32_t i = length-1; i >= 0; i--) |
302 | 324 | { |
303 | - | |
325 | + mode = array[i]; | |
326 | + if (mode == ST_VARIABLE_TOKEN) | |
327 | + { | |
328 | + double code = ST_first(head); | |
329 | + /*ここでリストの値を書き換えていることに注意*/ | |
330 | + head->first = code / (double) rand(); | |
331 | + head = ST_second(head); | |
332 | + } | |
304 | 333 | } |
305 | 334 | return true; |
306 | 335 | } |
@@ -39,8 +39,6 @@ extern "C" { | ||
39 | 39 | |
40 | 40 | |
41 | 41 | |
42 | - | |
43 | - | |
44 | 42 | /** Run modes for the basic interface. */ |
45 | 43 | typedef enum { |
46 | 44 | CU_BRM_NORMAL = 0, /**< Normal mode - failures and run summary are printed [default]. */ |
@@ -237,12 +237,20 @@ int main(int argc, char **argv) | ||
237 | 237 | assert(ST_parse(tokens, length, &ST_EMPTY) == false); |
238 | 238 | varlist = ST_tokenize(u8"aBa愛", tokens); |
239 | 239 | assert(ST_parse(tokens, length, varlist) == true); |
240 | + ST_freelist(varlist); | |
240 | 241 | init_token(tokens1); |
241 | 242 | length = sizeof(tokens1)/sizeof(tokens1[0]); |
242 | 243 | ST_parse(tokens1, length, &ST_EMPTY); |
243 | 244 | assert(ST_parse(tokens1, length, &ST_EMPTY) == false); |
244 | 245 | varlist = ST_tokenize(u8"aBa愛", tokens1); |
245 | 246 | assert(ST_parse(tokens1, length, varlist) == true); |
247 | + ST_freelist(varlist); | |
248 | + init_token(tokens1); | |
249 | + varlist = ST_tokenize(u8"(愛あ)(愛)", tokens1); | |
250 | + assert(ST_parse(tokens1, length, varlist) == true); | |
251 | + assert(ST_first(ST_second(varlist)) != ST_first(varlist)); | |
252 | + ST_freelist(varlist); | |
253 | + | |
246 | 254 | |
247 | 255 | |
248 | 256 | ST_Token_Mode tokenmode = ST_FUNCTION_APPLY_TOKEN; |