摘自1.8.6,parse.y
stmt : kalias fitem fitem
| kalias tgvar tgvar
| kalias tgvar tback_ref
| kalias tgvar tnth_ref
kalias沒有找到定義的部分,不知**可以產生這個訊號
莫非這個是由yacc而非lex產生的?
不過這個的意思還比較明顯,語言中使用alias定義的轉義
| kundef undef_list
意義也比較明顯,undef_list由fitem構成的
| stmt kif_mod expr_value
這個ms可以看作stat if cond的語法糖
| stmt kunless_mod expr_value
unless好像也是乙個語法糖,從**中可以看到將條件和else互換
| stmt kwhile_mod expr_value
| stmt kuntil_mod expr_value
while和until,兩個寫法相似,但好像不僅僅像if,unless一樣,這兩個語句似乎有自己的node型別
| stmt krescue_mod stmt
resure,我還沒怎麼用過的東西
| klbegin ''
| klend ''
這兩個語句的意義暫時搞不清
| lhs '=' command_call
lhs包含的型別十分豐富,不深究了。
出乎意料的是,後面的那個不是expr,而是command_call。從名字上,是否可以認為一切的expr都是command_call呢?
| mlhs '=' command_call
m=multiple?,有這個可能
| var_lhs top_asgn command_call
+=,-=等語法糖,這裡or和and單獨處理,原因不明
| primary_value '[' aref_args ']' top_asgn command_call
| primary_value '.' tidentifier top_asgn command_call
| primary_value '.' tconstant top_asgn command_call
| primary_value tcolon2 tidentifier top_asgn command_call
| backref top_asgn command_call
這幾個和上面的那個一樣,不過把lhs寫成var_lhs和primary...,可能有部分的lhs並不能用+=之類
| lhs '=' mrhs
| mlhs '=' arg_value
| mlhs '=' mrhs
還是幾個賦值語句,不管啦
| expr
這個包含的學問又大了
;expr : command_call
| arg
第乙個先不說
第二個其實就是各種四則運算(不止四則)
剩下的可能最重要的是primary,通過看這一段可以知道那些語句是ruby語言本身定義的原語
primary
: literal
暫時不說
| strings
「」定義和鏈結的字串,"a" "b"算乙個串,也包括%q[打頭的吧
| xstring
也是字串,用``包圍的可執行的命令,%x
| regexp
正規表示式
| words
『』定義的字串,也包括%w打頭的,%w和%q啥區別來著?
| qwords
%q定義的字串
| var_ref
變數名| backref
不祥| tfid
不祥
| kbegin bodystmt kend
begin end塊
| tlparen_arg expr opt_nl ')'
| tlparen compstmt ')'
| primary_value tcolon2 tconstant
| tcolon3 tconstant
| primary_value '[' aref_args ']'
| tlbrack aref_args ']'
| tlbrace assoc_list '}'
| kreturn
| kyield '(' call_args ')'
| kyield '(' ')'
| kyield
| kdefined opt_nl '(' expr ')'
| operation brace_block
| method_call
| method_call brace_block
| kif expr_value then
compstmt
if_tail
kend
| kunless expr_value then
compstmt
opt_else
kend
| kwhile expr_value do
compstmt
kend
| kuntil expr_value do
compstmt
kend
| kcase expr_value opt_terms
case_body
kend
| kcase opt_terms case_body kend
| kcase opt_terms kelse compstmt kend
| kfor block_var kin expr_value do
compstmt
kend
| kclass cpath superclass bodystmt kend
| kclass tlshft expr term bodystmt kend
| kmodule cpath bodystmt kend
| kdef fname f_arglist bodystmt kend
| kdef singleton dot_or_colon fname f_arglist bodystmt kend
| kbreak
| knext
| kredo
| kretry
;
nf hook ops中使用常量定義
supported address families define af unspec 0 define af unix 1 unix domain sockets define af local 1 posix name for af unix define af inet 2 internet ...
Ruby學習 Ruby類的使用
簡單的類定義和呼叫 如下 customer.rbclass customer g number 0 def initialize id,name,address m id id m name name m addr address g number 1 enddef display details ...
ruby 中使用 Dom技術來查詢頁面元素
有些時候可能會根據一些有限的資訊,來查詢頁面的元素,這裡舉乙個例子利用頁面文本來查詢所在的標籤,以 的登入頁面為例,使用以下 可以實現根據賬戶名來識別對應的節點名稱 如果子物件匹配到,那麼退出,退出後flag為true all children.each do child if child.inne...