[go: up one dir, main page]

File: tautogen.csml

package info (click to toggle)
chpp 0.3.4-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 3,228 kB
  • ctags: 5,154
  • sloc: ansic: 30,186; cpp: 575; sh: 500; makefile: 314; yacc: 265; asm: 261; lex: 64
file content (27 lines) | stat: -rw-r--r-- 824 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
%<file=%fopen(grammar)>\
%<current=runaway>\
%<data=%hash(runaway,%list())>\
%<regs=%list()>\
%until(%feof(%file),
    %<line=%sremovews(%fgets(%file))>\
    %if(%[%smatch(%'^--([a-zA-Z0-9_]+)',%line,%&regs)!=-1],
        %<current=%regs[1]>\
        %<data{%current}=%list()>\
        %if(%not(%bound(start)),%<start=%current>)
    ,
        %if(%line,%<data{%current}[%llength(%data{%current})]=%line>)
    )
)\
%fclose(%file)\
\
%if(%not(%bound(n)),%<n=10>)\
%define(repl,str,s,l,ns,%ssub(%str,0,%s)%ns%ssub(%str,%[s+l]))\
%define(some,nt,%&data{%nt}[%random(%llength(%data{%nt}))])\
%for(i,1,%n,
    %<current=%some(%start)>\
    %<mp=-1>\
    %while(%<mp=%smatch(%'\\$([a-zA-Z0-9_]+)',%current,%&regs)>%[mp!=-1],
        %<current=%repl(%&current,%&mp,%slength(%regs[0]),%some(%regs[1]))>
    )\
    %current%'\n\n'
)\