1:- use_module(library(dcg/basics)). 2
3string_literal("") --> "\"\"",!.
4string_literal(S) --> "\"",string_inner(S),"\"",!.
5string_literal1("") --> "\'\'",!.
6string_literal1(S) --> "\'",string_inner(S),"\'".
7string_inner([A]) --> string_inner_(A).
8string_inner([A|B]) --> string_inner_(A),string_inner(B).
9string_inner_(A) --> {A="\\\"";A="\\\'"},A;{dif(A,'"'),dif(A,'\''),dif(A,'\n')},[A].
10
11ws --> "";blanks.
12ws_ --> (" ";"\n";"\r";"\t"),blanks.
13
14python_ws --> "";python_ws_.
15python_ws_ --> (" ";"\t"),python_ws.
16
17symbol([L|Ls]) --> letter(L), symbol_r(Ls).
18symbol_r([L|Ls]) --> csym(L), symbol_r(Ls).
19symbol_r([]) --> [].
20letter(Let) --> [Let], { code_type(Let, alpha) }.
21csym(Let) --> [Let], {code_type(Let, csym)}.
22
23a_double(A) --> a_double_(A).
24a_double([-A]) --> "-",a_double_(A).
25a_double_([A,['0']]) -->
26 (an_int(A)).
27a_double_([A,B]) -->
28 (an_int(A), ".",!, an_int(B)).
29an_int([L|Ls]) --> digit(L), an_int_r(Ls).
30an_int_r([L|Ls]) --> digit(L), an_int_r(Ls).
31an_int_r([]) --> []