Compiler/lexical analyzer: Difference between revisions

Content added Content deleted
Line 6,998: Line 6,998:
}
}
default : {
default : {
if (ch[1] ? any(&digits)) then {
if any(&digits, ch[1]) then {
ch @pushback
ch @pushback
return scan_integer_literal(inp, pushback)
return scan_integer_literal(inp, pushback)
} else if (ch[1] ? any(ident_start)) then {
} else if any(ident_start, ch[1]) then {
ch @pushback
ch @pushback
return scan_identifier_or_reserved_word (inp, pushback)
return scan_identifier_or_reserved_word (inp, pushback)
Line 7,020: Line 7,020:
line_no := ch[2]
line_no := ch[2]
column_no := ch[3]
column_no := ch[3]
while EOF ~=== ch[1] & (ch[1] ? any(ident_continuation)) do {
while EOF ~=== ch[1] & any(ident_continuation, ch[1]) do {
s ||:= ch[1]
s ||:= ch[1]
ch := @inp
ch := @inp
Line 7,037: Line 7,037:
line_no := ch[2]
line_no := ch[2]
column_no := ch[3]
column_no := ch[3]
while EOF ~=== ch[1] & (ch[1] ? any(ident_continuation)) do {
while EOF ~=== ch[1] & any(ident_continuation, ch[1]) do {
s ||:= ch[1]
s ||:= ch[1]
ch := @inp
ch := @inp
Line 7,134: Line 7,134:
ch := @inp
ch := @inp
(EOF === ch[1]) & { ch @pushback; return }
(EOF === ch[1]) & { ch @pushback; return }
if not (ch[1] ? any(whitespace)) then {
if not any(whitespace, ch[1]) then {
(ch[1] == "/") | { ch @pushback; return }
(ch[1] == "/") | { ch @pushback; return }
(ch1 := @inp) | { ch @pushback; return }
(ch1 := @inp) | { ch @pushback; return }