From b89add6adff9347e22995a2875704dec9f91eac8 Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Tue, 12 Sep 2017 17:09:53 +0200 Subject: [PATCH] Fix precedences --- lib/mm2ep_depend/lexer.rb | 6 +++--- lib/mm2ep_depend/parser.rb | 14 ++++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/mm2ep_depend/lexer.rb b/lib/mm2ep_depend/lexer.rb index d2c60dd..797c911 100755 --- a/lib/mm2ep_depend/lexer.rb +++ b/lib/mm2ep_depend/lexer.rb @@ -2,18 +2,18 @@ module Mm2ep module Depend class Lexer < Rly::Lex + token :SPACE, /\s+/ token :L_PAR, /\(/ token :R_PAR, /\)/ token :NUMBER, /[0-9]+(\.[0-9]+)?/ token :STRING, /"[^"]*"/ token :EQ_OP, /\=/ - token :T_BOOL, /[tT]rue/ - token :F_BOOL, /[fF]alse/ + token :T_BOOL, /true/i + token :F_BOOL, /false/i token :VAR, /[a-z][a-zA-Z0-9_]+/ token :AND_OP, /AND/ token :OR_OP, /OR/ token :NOT_OP, /NOT/ - token :SPACE, /\s+/ on_error do |t| puts "Illegal character #{t.value}" diff --git a/lib/mm2ep_depend/parser.rb b/lib/mm2ep_depend/parser.rb index d24a108..6369ec9 100755 --- a/lib/mm2ep_depend/parser.rb +++ b/lib/mm2ep_depend/parser.rb @@ -74,7 +74,7 @@ module Mm2ep end def to_s - "(#{@expr1.to_s}) AND (#{@expr2.to_s})" + "( #{@expr1.to_s}) AND (#{@expr2.to_s} )" end end @@ -89,7 +89,7 @@ module Mm2ep end def to_s - "(#{@expr1.to_s}) OR (#{@expr2.to_s})" + "( #{@expr1.to_s}) OR (#{@expr2.to_s} )" end end @@ -103,7 +103,7 @@ module Mm2ep end def to_s - "NOT (#{@expr.to_s})" + "NOT ( #{@expr.to_s} )" end end @@ -124,8 +124,10 @@ module Mm2ep class Parser < Rly::Yacc - precedence :left, 'OR_OP', 'EQ_OP' - precedence :left, 'AND_OP', 'NOT_OP' + precedence :left, 'OR_OP' + precedence :left, 'AND_OP' + precedence :left, 'EQ_OP' + precedence :right, :UMINUS rule 'statement : expr' do |st, e| st.value = e.value @@ -146,7 +148,7 @@ module Mm2ep ex.value = BoolValue.new(l.value.to_s) 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) end