summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlasdair Armstrong2018-02-06 17:31:16 +0000
committerAlasdair Armstrong2018-02-06 17:33:28 +0000
commitc719cba2428ccca3eb8646176cd9da7795deb029 (patch)
treef0baf08da022bcd283519b409cd8248ffb28d6c2 /src
parenta994afb16a99ea2d1e19311f4d75021bc7dabcd5 (diff)
Fix lexer so operators cannot start with /* or //
Diffstat (limited to 'src')
-rw-r--r--src/lexer.mll8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/lexer.mll b/src/lexer.mll
index 3538d5cb..7508abfc 100644
--- a/src/lexer.mll
+++ b/src/lexer.mll
@@ -193,8 +193,14 @@ let alphanum = letter|digit
let startident = letter|'_'
let ident = alphanum|['_''\'''#']
let tyvar_start = '\''
+(* Ensure an operator cannot start with comment openings *)
let oper_char = ['!''%''&''*''+''-''.''/'':''<''=''>''@''^''|']
-let operator = (oper_char+ ('_' ident)?)
+let oper_char_no_slash = ['!''%''&''*''+''-''.'':''<''=''>''@''^''|']
+let oper_char_no_slash_star = ['!''%''&''+''-''.'':''<''=''>''@''^''|']
+let operator1 = oper_char
+let operator2 = oper_char oper_char_no_slash_star | oper_char_no_slash oper_char
+let operatorn = oper_char oper_char_no_slash_star (oper_char* ('_' ident)?) | oper_char_no_slash oper_char (oper_char* ('_' ident)?) | oper_char ('_' ident)?
+let operator = operator1 | operator2 | operatorn
let escape_sequence = ('\\' ['\\''\"''\'''n''t''b''r']) | ('\\' digit digit digit) | ('\\' 'x' hexdigit hexdigit)
let lchar = [^'\n']