In: |
kwartz.rb
|
Parent: | Object |
usage.
input = <<END :if(ctr % 2 == 0) :print('even') :else :print('odd') :end END scanner = Kwartz::Scanner.new(input) parser = Kwartz::Parser.new(scanner) nodelist = parser.parse()
METHOD_DISPATHER | = | { :set => :parse_stmt_set, :if => :parse_stmt_if, :while => :parse_stmt_while, :foreach => :parse_stmt_foreach, :print => :parse_stmt_print, :macro => :parse_stmt_macro, :elem => :parse_stmt_elem, :expand => :parse_stmt_expand, :expand2 => :parse_stmt_expand2, :stag => :parse_stmt_specialexpand, :cont => :parse_stmt_specialexpand, :etag => :parse_stmt_specialexpand, :value => :parse_stmt_value, :rawcode => :parse_stmt_rawcode, ':::' => :parse_stmt_rawcode, :load => :parse_stmt_load, } |
compare priority of operators. this is called from Translator#translate_expr().
return true if op1 > op2, nil if op1 == op2, false if op1 < op2.
arith2 ::= term | term '+' arith | term '-' arith | term '.+' arith arith ::= unary | unary '+' arith2 | unary '-' arith2 | unary '.+' arith2 ::= unary { ('+' | '-' | '.+') term }
array ::= item | item '[' expr ']' | item '{' expr '}' | item '[:' name ']' | item '.' property ::= item { '[' expr ']' | '{' expr '}' | '[:' name ']' | '.' propperty }
assignment ::= expression assign-op expression | expression ::= expression [ assign-op expression ]
compare-op ::= '==' | '!=' | '>' | '>=' | '<' | '<=' | '.==' | '.!=' | '.>' | '.>=' | '.<' | '.<=' compare ::= arith compare-op arith | arith ['==' | '!='] 'empty'
expression ::= logical-or | logical-or '?' logical-or ':' logical-or ::= logical-or { '?' logical-or ':' logical-or }
elem-stmt ::= ':elem' '(' name ')' stmt-list ':end'
token: | :macro |
left: | name String |
right: | NodeList |
stmt ::= set-stmt | if-stmt | while-stmt | foreach-stmt | print-stmt | macro-stmt | expand-stmt | rawcode-stmt | print2-stmt stmt-list ::= stmt*
macro-stmt ::= ':macro' '(' name ')' stmt-list ':end'
token: | :macro |
left: | name String |
right: | NodeList |
print-stmt ::= ':print' '(' expression { ',' expression } ')'
token: | |
left: | expression ExprNode |
right: | nil |
rawcode ::= ':::' raw-string | ':rawcode' '(' string ')'
token: | :rawcode |
left: | rawcode String |
right: | nil |
set-stmt ::= ':set' '(' assignment ')'
token: | :set |
left: | assignment ExprNode |
right: | nil |
special-expand-stmt ::= '@stag' | '@cont' | '@etag' | ':stag' | ':cont' | ':etag'
token: | :expand |
left: | name String |
right: | nil |
value-stmt ::= ':value' '(' name '=' expression ')'
token: | :value |
left: | name String (‘cont_’ + name) |
right: | NodeList (of PrintStmtNode) |