| 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) |