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