Fix precedences
This commit is contained in:
parent
62005c6087
commit
b89add6adf
2 changed files with 11 additions and 9 deletions
|
@ -2,18 +2,18 @@ module Mm2ep
|
||||||
module Depend
|
module Depend
|
||||||
class Lexer < Rly::Lex
|
class Lexer < Rly::Lex
|
||||||
|
|
||||||
|
token :SPACE, /\s+/
|
||||||
token :L_PAR, /\(/
|
token :L_PAR, /\(/
|
||||||
token :R_PAR, /\)/
|
token :R_PAR, /\)/
|
||||||
token :NUMBER, /[0-9]+(\.[0-9]+)?/
|
token :NUMBER, /[0-9]+(\.[0-9]+)?/
|
||||||
token :STRING, /"[^"]*"/
|
token :STRING, /"[^"]*"/
|
||||||
token :EQ_OP, /\=/
|
token :EQ_OP, /\=/
|
||||||
token :T_BOOL, /[tT]rue/
|
token :T_BOOL, /true/i
|
||||||
token :F_BOOL, /[fF]alse/
|
token :F_BOOL, /false/i
|
||||||
token :VAR, /[a-z][a-zA-Z0-9_]+/
|
token :VAR, /[a-z][a-zA-Z0-9_]+/
|
||||||
token :AND_OP, /AND/
|
token :AND_OP, /AND/
|
||||||
token :OR_OP, /OR/
|
token :OR_OP, /OR/
|
||||||
token :NOT_OP, /NOT/
|
token :NOT_OP, /NOT/
|
||||||
token :SPACE, /\s+/
|
|
||||||
|
|
||||||
on_error do |t|
|
on_error do |t|
|
||||||
puts "Illegal character #{t.value}"
|
puts "Illegal character #{t.value}"
|
||||||
|
|
|
@ -74,7 +74,7 @@ module Mm2ep
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
"(#{@expr1.to_s}) AND (#{@expr2.to_s})"
|
"( #{@expr1.to_s}) AND (#{@expr2.to_s} )"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ module Mm2ep
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
"(#{@expr1.to_s}) OR (#{@expr2.to_s})"
|
"( #{@expr1.to_s}) OR (#{@expr2.to_s} )"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ module Mm2ep
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
"NOT (#{@expr.to_s})"
|
"NOT ( #{@expr.to_s} )"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -124,8 +124,10 @@ module Mm2ep
|
||||||
|
|
||||||
class Parser < Rly::Yacc
|
class Parser < Rly::Yacc
|
||||||
|
|
||||||
precedence :left, 'OR_OP', 'EQ_OP'
|
precedence :left, 'OR_OP'
|
||||||
precedence :left, 'AND_OP', 'NOT_OP'
|
precedence :left, 'AND_OP'
|
||||||
|
precedence :left, 'EQ_OP'
|
||||||
|
precedence :right, :UMINUS
|
||||||
|
|
||||||
rule 'statement : expr' do |st, e|
|
rule 'statement : expr' do |st, e|
|
||||||
st.value = e.value
|
st.value = e.value
|
||||||
|
@ -146,7 +148,7 @@ module Mm2ep
|
||||||
ex.value = BoolValue.new(l.value.to_s)
|
ex.value = BoolValue.new(l.value.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
rule 'expr : NOT_OP SPACE expr' do |ex, l, s, e|
|
rule 'expr : NOT_OP SPACE expr %prec UMINUS' do |ex, l, s, e|
|
||||||
ex.value = NotOp.new(e.value)
|
ex.value = NotOp.new(e.value)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue