ruby中使用yacc定義的語法規則

2021-04-16 08:01:33 字數 3255 閱讀 7531

摘自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...