回答編集履歴

5

fix

2017/07/06 09:53

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -81,3 +81,33 @@
81
81
 
82
82
 
83
83
  特殊すぎるwww
84
+
85
+
86
+
87
+ 位置づけで言うと clone 等と同じ位置づけの様です。
88
+
89
+
90
+
91
+ ```
92
+
93
+ %token T_UNSET_CAST "(unset) (T_UNSET_CAST)"
94
+
95
+ %token T_NEW "new (T_NEW)"
96
+
97
+ %token T_CLONE "clone (T_CLONE)"
98
+
99
+ %token T_EXIT "exit (T_EXIT)"
100
+
101
+ %token T_IF "if (T_IF)"
102
+
103
+ %token T_ELSEIF "elseif (T_ELSEIF)"
104
+
105
+ %token T_ELSE "else (T_ELSE)"
106
+
107
+ %token T_ENDIF "endif (T_ENDIF)"
108
+
109
+ %token T_ECHO "echo (T_ECHO)"
110
+
111
+ ```
112
+
113
+

4

fix

2017/07/06 09:53

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -46,4 +46,38 @@
46
46
 
47
47
 
48
48
 
49
- もう少し説明すると php の exit(1) は `exit` の右項に取る式 `exit (1)` という解釈をされていました。
49
+ もう少し説明すると php の exit(1) は `exit` の右項に取る式 `exit (1)` という解釈をされていました。ただ右項として実際に `(1)` を渡す事は出来ず、BNF 上 exit の引数は exit_expr という専用のパースが行われていました。
50
+
51
+
52
+
53
+ 一般式の BNF
54
+
55
+ ```
56
+
57
+ expr:
58
+
59
+ variable { $$ = $1; }
60
+
61
+ | expr_without_variable { $$ = $1; }
62
+
63
+ ```
64
+
65
+
66
+
67
+ exit の右項のの BNF
68
+
69
+ ```
70
+
71
+ exit_expr:
72
+
73
+ /* empty */ { $$ = NULL; }
74
+
75
+ | '(' optional_expr ')' { $$ = $2; }
76
+
77
+ ;
78
+
79
+ ```
80
+
81
+
82
+
83
+ 特殊すぎるwww

3

fix

2017/07/06 09:51

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -42,4 +42,8 @@
42
42
 
43
43
 
44
44
 
45
+ さらに追記
45
46
 
47
+
48
+
49
+ もう少し説明すると php の exit(1) は `exit` の右項に取る式 `exit (1)` という解釈をされていました。

2

fix

2017/07/06 09:46

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 実際は exit は print 等と同じ builtin 命令として登録されており、明確に関数とは区別されていました。また
21
+ 実際は exit は print や return 等と同じ builtin 命令として登録されており、明確に関数とは区別されていました。また
22
22
 
23
23
 
24
24
 
@@ -37,3 +37,9 @@
37
37
  で呼べないので関数として認識していない様でした。
38
38
 
39
39
 
40
+
41
+ ですので exit は return 等と同じ「構文」で良いと思います。
42
+
43
+
44
+
45
+

1

fix

2017/07/06 09:41

投稿

mattn
mattn

スコア5030

test CHANGED
@@ -2,4 +2,38 @@
2
2
 
3
3
 
4
4
 
5
+ <del>実際には exit(1) は関数なので式です。</del>
6
+
7
+
8
+
9
+ 追記
10
+
11
+
12
+
5
- 実際には exit(1) は関数なのです。
13
+ すいません。exit は関数では無かったです。
14
+
15
+
16
+
17
+ https://github.com/php/php-src/blob/master/Zend/zend_compile.c#L8274
18
+
19
+
20
+
21
+ 実際は exit は print 等と同じ builtin 命令として登録されており、明確に関数とは区別されていました。また
22
+
23
+
24
+
25
+ ```php
26
+
27
+ if (is_callable('exit')) {
28
+
29
+ echo "yes";
30
+
31
+ }
32
+
33
+ ```
34
+
35
+
36
+
37
+ で呼べないので関数として認識していない様でした。
38
+
39
+