--- factorcss/Parser.y 2004/12/27 19:45:02 63 +++ factorcss/Parser.y 2004/12/28 14:23:12 65 @@ -15,45 +15,45 @@ } %name parser -%tokentype { Token } +%tokentype { TokenPosn } %token - INCLUDES { INCLUDES } - DASHMATCH { DASHMATCH } - LBRACE { LBRACE } - PLUS { PLUS } - GREATER { GREATER } - COMMA { COMMA } - STRING { STRING $$ } - IDENT { IDENT $$ } - HASH { HASH $$ } - IMPORT_SYM { IMPORT_SYM } - PAGE_SYM { PAGE_SYM } - MEDIA_SYM { MEDIA_SYM } - CHARSET_SYM { CHARSET_SYM } - IMPORTANT_SYM { IMPORTANT_SYM } - EMS { EMS $$ } - EXS { EXS $$ } - LENGTH { LENGTH $$ } - ANGLE { ANGLE $$ } - TIME { TIME $$ } - FREQ { FREQ $$ } - DIMEN { DIMEN $$ } - PERCENTAGE { PERCENTAGE $$ } - NUMBER { NUMBER $$ } - URI { URI $$ } - FUNCTION { FUNCTION $$ } - DELIM { DELIM $$ } - SEMI { SEMI } - RBRACE { RBRACE } - COLON { COLON } - SLASH { SLASH } - MINUS { MINUS } - DOT { DOT } - LBRAC { LBRAC } - RBRAC { RBRAC } - ASTERISK { ASTERISK } - EQUALS { EQUALS } - RPAREN { RPAREN } + INCLUDES { (INCLUDES , _) } + DASHMATCH { (DASHMATCH , _) } + LBRACE { (LBRACE , _) } + PLUS { (PLUS , _) } + GREATER { (GREATER , _) } + COMMA { (COMMA , _) } + STRING { (STRING $$ , _) } + IDENT { (IDENT $$ , _) } + HASH { (HASH $$ , _) } + IMPORT_SYM { (IMPORT_SYM , _) } + PAGE_SYM { (PAGE_SYM , _) } + MEDIA_SYM { (MEDIA_SYM , _) } + CHARSET_SYM { (CHARSET_SYM , _) } + IMPORTANT_SYM { (IMPORTANT_SYM, _) } + EMS { (EMS $$ , _) } + EXS { (EXS $$ , _) } + LENGTH { (LENGTH $$ , _) } + ANGLE { (ANGLE $$ , _) } + TIME { (TIME $$ , _) } + FREQ { (FREQ $$ , _) } + DIMEN { (DIMEN $$ , _) } + PERCENTAGE { (PERCENTAGE $$, _) } + NUMBER { (NUMBER $$ , _) } + URI { (URI $$ , _) } + FUNCTION { (FUNCTION $$ , _) } + DELIM { (DELIM $$ , _) } + SEMI { (SEMI , _) } + RBRACE { (RBRACE , _) } + COLON { (COLON , _) } + SLASH { (SLASH , _) } + MINUS { (MINUS , _) } + DOT { (DOT , _) } + LBRAC { (LBRAC , _) } + RBRAC { (RBRAC , _) } + ASTERISK { (ASTERISK , _) } + EQUALS { (EQUALS , _) } + RPAREN { (RPAREN , _) } %% @@ -61,7 +61,7 @@ : charset import_list statement_list { Stylesheet $1 $2 $3 } charset :: { Maybe String } - : { Nothing } + : { Nothing } | CHARSET_SYM STRING SEMI { Just $2 } import_list :: { [(String, [String])] } @@ -121,11 +121,11 @@ selector_list_1 :: { [Selector] } : selector { [$1] } - | selector_list_1 COMMA selector { $3 : $1 } + | selector_list_1 COMMA selector { $3 : $1 } selector :: { Selector } : simple_selector { [($1, NoMore)] } - | simple_selector combinator selector { ($1, $2) : $3 } + | simple_selector combinator selector { ($1, $2) : $3 } combinator :: { Combinator } : { Ancestor } @@ -204,6 +204,12 @@ | FUNCTION value_list RPAREN { Function $1 $2 } { -happyError :: [Token] -> a -happyError _ = error "Parse error" +happyError :: [TokenPosn] -> a +happyError tks = error ("Parse error at " ++ lcn) + where + lcn = case tks of + [] -> "end of file" + tk:_ -> "line " ++ show l ++ ", column " ++ show c + where + AlexPn _ l c = snd tk }