{ open Desktopparser let pos = ref 1 let go text = pos := (!pos + String.length text) let token_to_string token = match token with LSquare -> "[" | RSquare -> "]" | Comment -> "#" | Equals -> "=" | Other s-> "Other: \"" ^ s ^ "\"" | Newline -> "Newline" | White s -> "White" | Eof -> "Eof" (* Once an assignment statement begins nothing can end it except and end of line. Thus, a comment cannot begin anywhere but at the beginning of a line (or after some white space.) *) } let w = [' ' '\t'] let com = '#' [^ '\n']* '\n' let nl = ((w* com+) | (w* '\n')) (com | w | '\n')* rule item = parse '[' {let t = Lexing.lexeme lexbuf in go t; LSquare} | ']' {let t = Lexing.lexeme lexbuf in go t; RSquare} | '=' {let t = Lexing.lexeme lexbuf in go t; Equals} | '#' {let t = Lexing.lexeme lexbuf in go t; Comment} | '\n' {let t = Lexing.lexeme lexbuf in go t; Newline} | w+ {let t = Lexing.lexeme lexbuf in go t; White t} | eof {Eof} | [ ^ '[' '\n' '#' ']' '=' ]+ {let t = Lexing.lexeme lexbuf in go t; Other t}