Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PARSER
- %token <bool> BOOL
- %token AND OR NOT
- %token LPAREN RPAREN
- %token EOL
- %left AND OR /* lowest precedence */
- %nonassoc NOT /* highest precedence */
- %start <bool> main
- %%
- main:
- | e = expr EOL
- { e }
- expr:
- | i = BOOL
- { i }
- | LPAREN e = expr RPAREN
- { e }
- | e1 = expr AND e2 = expr
- { e1 && e2 }
- | e1 = expr OR e2 = expr
- { e1 || e2 }
- | NOT e = expr %prec NOT
- { not e }
- LEXER
- {
- open Parser
- exception Error of string
- }
- rule line = parse
- | ([^'\n']* '\n') as line
- { line }
- | eof
- { exit 0 }
- and token = parse
- | [' ' '\t']
- { token lexbuf }
- | '\n'
- { EOL }
- | "AND"
- { AND }
- | "OR"
- { OR }
- | "NOT"
- { NOT }
- | '('
- { LPAREN }
- | ')'
- { RPAREN }
- | ['a'-'z' 'A'-'Z' '_' '0'-'9']+ as i
- { BOOL (Hashtbl.mem Globals.flags_tbl i) }
- | eof
- { exit 0 }
- | _
- { raise (Error (Printf.sprintf "At offset %d: unexpected character.\n" (Lexing.lexeme_start lexbuf))) }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement