summaryrefslogtreecommitdiff
path: root/RGens
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-02-09 15:32:37 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-02-09 15:32:37 -0500
commit36cf3a0f0604ef43ce838ff6e9a7fc4e7c299522 (patch)
tree6e4e9ea9015f72da5670ad8f733d51cde77211cf /RGens
parent26017da6c2e135f8a41dc7dbd805d7bdce518219 (diff)
Lots of additional data
Diffstat (limited to 'RGens')
-rw-r--r--RGens/data/sample-grammars/.DS_Storebin6148 -> 6148 bytes
-rw-r--r--RGens/data/sample-grammars/acronym.gram9
-rw-r--r--RGens/data/sample-grammars/address.gram102
-rw-r--r--RGens/data/sample-grammars/buzzword.gram253
-rw-r--r--RGens/data/sample-grammars/career.gram52
-rw-r--r--RGens/data/sample-grammars/city.gram95
-rw-r--r--RGens/data/sample-grammars/college.gram61
-rw-r--r--RGens/data/sample-grammars/company.gram170
-rw-r--r--RGens/data/sample-grammars/computer.gram34
-rw-r--r--RGens/data/sample-grammars/congress.gram35
-rw-r--r--RGens/data/sample-grammars/dates.gram20
-rwxr-xr-xRGens/data/sample-grammars/diablo-ii/diabloii.gram6
-rwxr-xr-xRGens/data/sample-grammars/diablo-ii/diabloiiitems.gram4
-rwxr-xr-xRGens/data/sample-grammars/diablo-ii/diabloiiprefixes.gram4
-rw-r--r--RGens/data/sample-grammars/firstname-female.long532
-rw-r--r--RGens/data/sample-grammars/firstname-male.long624
-rw-r--r--RGens/data/sample-grammars/fortune.gram90
-rwxr-xr-xRGens/data/sample-grammars/genre-fiction.gram3
-rw-r--r--RGens/data/sample-grammars/insults.gram2
-rw-r--r--RGens/data/sample-grammars/linux.gram942
-rw-r--r--RGens/data/sample-grammars/long-data/animal.long15
-rw-r--r--RGens/data/sample-grammars/long-data/binary-digit.long2
-rw-r--r--RGens/data/sample-grammars/long-data/canada-province.long14
-rw-r--r--RGens/data/sample-grammars/long-data/character.long38
-rw-r--r--RGens/data/sample-grammars/long-data/color.long10
-rw-r--r--RGens/data/sample-grammars/long-data/consonant-group.long42
-rw-r--r--RGens/data/sample-grammars/long-data/consonant.long21
-rw-r--r--RGens/data/sample-grammars/long-data/digit-noone.long9
-rw-r--r--RGens/data/sample-grammars/long-data/digit-nozero.long9
-rw-r--r--RGens/data/sample-grammars/long-data/digit.long10
-rw-r--r--RGens/data/sample-grammars/long-data/first-name-female.long532
-rw-r--r--RGens/data/sample-grammars/long-data/first-name-male.long624
-rw-r--r--RGens/data/sample-grammars/long-data/hex-digit.long16
-rw-r--r--RGens/data/sample-grammars/long-data/last-name.long (renamed from RGens/data/sample-grammars/lastname.long)0
-rw-r--r--RGens/data/sample-grammars/long-data/last-syllable.long9
-rw-r--r--RGens/data/sample-grammars/long-data/letter.long26
-rw-r--r--RGens/data/sample-grammars/long-data/middle-initial.long18
-rw-r--r--RGens/data/sample-grammars/long-data/nation.long218
-rw-r--r--RGens/data/sample-grammars/long-data/natural-color.long6
-rw-r--r--RGens/data/sample-grammars/long-data/number-word.long10
-rw-r--r--RGens/data/sample-grammars/long-data/ordinal.long12
-rw-r--r--RGens/data/sample-grammars/long-data/planet.long8
-rw-r--r--RGens/data/sample-grammars/long-data/real-city.long76
-rw-r--r--RGens/data/sample-grammars/long-data/real-company.long207
-rw-r--r--RGens/data/sample-grammars/long-data/relative.long10
-rw-r--r--RGens/data/sample-grammars/long-data/roman-numeral.long10
-rw-r--r--RGens/data/sample-grammars/long-data/syllable.long (renamed from RGens/data/sample-grammars/syllable.long)0
-rw-r--r--RGens/data/sample-grammars/long-data/town-name.long141
-rw-r--r--RGens/data/sample-grammars/long-data/tree.long17
-rw-r--r--RGens/data/sample-grammars/long-data/vowel-group.long18
-rw-r--r--RGens/data/sample-grammars/long-data/vowel.long5
-rw-r--r--RGens/data/sample-grammars/media.gram159
-rw-r--r--RGens/data/sample-grammars/mission.gram4
-rw-r--r--RGens/data/sample-grammars/names.gram30
-rw-r--r--RGens/data/sample-grammars/newspaper.gram4
-rw-r--r--RGens/data/sample-grammars/numbers.gram19
-rw-r--r--RGens/data/sample-grammars/ordinal.gram20
-rw-r--r--RGens/data/sample-grammars/organization.gram186
-rw-r--r--RGens/data/sample-grammars/phone-number.gram22
-rw-r--r--RGens/data/sample-grammars/president.gram64
-rw-r--r--RGens/data/sample-grammars/realcity.long76
-rw-r--r--RGens/data/sample-grammars/realcompany.long207
-rw-r--r--RGens/data/sample-grammars/school.gram17
-rw-r--r--RGens/data/sample-grammars/slashdot.gram62
-rw-r--r--RGens/data/sample-grammars/states.gram156
-rw-r--r--RGens/data/sample-grammars/theory.gram25
-rw-r--r--RGens/data/sample-grammars/townname.long141
-rw-r--r--RGens/data/sample-grammars/trademark.gram186
-rw-r--r--RGens/data/sample-grammars/username.gram12
-rw-r--r--RGens/data/sample-grammars/web.gram103
-rw-r--r--RGens/data/server-config-sample.cfg40
-rw-r--r--RGens/pom.xml17
-rw-r--r--RGens/src/main/java/bjc/RGens/server/CLIArgsParser.java141
-rw-r--r--RGens/src/main/java/bjc/RGens/server/GrammarServerEngine.java300
-rw-r--r--RGens/src/main/java/bjc/RGens/server/ServerGrammarReader.java161
75 files changed, 5588 insertions, 1735 deletions
diff --git a/RGens/data/sample-grammars/.DS_Store b/RGens/data/sample-grammars/.DS_Store
index db7be62..0abe52c 100644
--- a/RGens/data/sample-grammars/.DS_Store
+++ b/RGens/data/sample-grammars/.DS_Store
Binary files differ
diff --git a/RGens/data/sample-grammars/acronym.gram b/RGens/data/sample-grammars/acronym.gram
new file mode 100644
index 0000000..6d260f4
--- /dev/null
+++ b/RGens/data/sample-grammars/acronym.gram
@@ -0,0 +1,9 @@
+[acronym] [actual+acronym]
+
+pragma initial-rule [acronym]
+
+[actual+acronym] [consonant] [vowel] [consonant]
+ [consonant-group] [consonant] [consonant]
+ [consonant] [consonant] [consonant] [consonant]
+ [consonant] [vowel] [consonant] [vowel]
+ [letter] [vowel-group] [letter] [consonant]
diff --git a/RGens/data/sample-grammars/address.gram b/RGens/data/sample-grammars/address.gram
new file mode 100644
index 0000000..5b963d9
--- /dev/null
+++ b/RGens/data/sample-grammars/address.gram
@@ -0,0 +1,102 @@
+[us-postal-address] [full-name] , [street-address] , [city] , [us-postalstate] [zipcode]
+ [full-name-and-title] , [street-address] , [city] , [us-postalstate] [zipcode]
+ [person] , [street-address] , [city] , [us-postalstate] [zipcode]
+ [full-name] , [company] , [street-address] , [city] , [us-postalstate] [zipcode]
+ [company] , [street-address] , [city] , [us-postalstate] , [zipcode]
+ [company] , p.o box [medium-number] , [city] , [us-postalstate] [zipcode]
+
+[street-address] [medium-number] [street]
+ p.o. box [medium-number]
+ [medium-number] [street] , apartment [small-number] [letter]
+ route [digit] box [medium-number]
+ [small-number] street
+
+[street] [street-prefix] [tree] [street-suffix]
+ [tree] [street-suffix]
+ [color] [tree] [street-suffix]
+ [street-prefix] [last-name] [street-suffix]
+ [street-prefix] [first-name] [street-suffix]
+ [last-name] [street-suffix]
+ route [small-number]
+ [street-prefix] route [small-number]
+ county road [small-number]
+ [street-prefix] [ordinal] street]
+ [ordinal] ave.
+ [ordinal-number] st.
+ [ordinal-number] ave.
+ [letter] st.
+ [city] [street-suffix]
+ [us-state] [street-suffix]
+ [street-prefix] [us-state] [street-suffix]
+ [canada-province] [street-suffix]
+ [nation] [street-suffix]
+ [full-name] [street-suffix]
+ [street-prefix] [street-generic-standalone]
+ [street-prefix] [street-generic] [street-suffix]
+ [street-generic] [street-suffix]
+ [us-president] [street-suffix]
+ [us-president-common] [street-suffix]
+
+[street-prefix] n.
+ s.
+ e.
+ w.
+
+[street-suffix] street
+ st.
+ road
+ rd.
+ way
+ boulevard
+ blvd.
+ avenue
+ ave.
+ place
+ plaza
+ court
+ drive
+ highway
+ hwy.
+ parkway
+ pkwy.
+ pike
+ bypass
+
+pragma initial-rule [us-postal-address]
+
+[street-generic] main
+ main
+ high
+ independence
+ division
+ center
+ m. l. king
+ washington
+ lincoln
+ college
+ university
+ stadium
+ riverside
+ water
+ park
+ shore
+ airport
+ grand
+ sunset
+ telegraph
+ railroad
+ el paseo
+ market
+ church
+ mill
+ highland
+ woodland
+ hillcrest
+ lakeview
+ central
+ [geographic-thing]
+
+[street-generic-standalone] broadway
+ avenue of the americas
+ kingshighway
+ el camino real
diff --git a/RGens/data/sample-grammars/buzzword.gram b/RGens/data/sample-grammars/buzzword.gram
new file mode 100644
index 0000000..597fb4f
--- /dev/null
+++ b/RGens/data/sample-grammars/buzzword.gram
@@ -0,0 +1,253 @@
+[buzzword] [buzzword-verb]
+ [buzzword-noun]
+ [buzzword-adjective]
+ [buzzword-job]
+
+pragma initial-rule [buzzword]
+pragma export-rule [buzzword-verb]
+pragma export-rule [buzzword-noun]
+pragma export-rule [buzzword-adjective]
+pragma export-rule [buzzword-job]
+
+[buzzword-verb] aggregate
+ benchmark
+ brand
+ capitalize
+ conceptualize
+ deliver
+ deploy
+ drive
+ embrace
+ empower
+ enable
+ engage
+ engineer
+ enhance
+ envision
+ evolve
+ expedite
+ exploit
+ extend
+ facilitate
+ generate
+ harness
+ implement
+ incentivize
+ incubate
+ innovate
+ integrate
+ leverage
+ maximize
+ mesh
+ monetize
+ morph
+ necessitate
+ optimize
+ orchestrate
+ productize
+ reformulate
+ reintermediate
+ reinvent
+ repurpose
+ revolutionize
+ scale
+ spearhead
+ strategize
+ streamline
+ syndicate
+ synergize
+ synthesize
+ take ownership
+ target
+ touch base
+ transform
+ trivialize
+ unleash
+ utilize
+ visualize
+
+[buzzword-noun] action items
+ architectures
+ asset management
+ bandwidth
+ channels
+ communities
+ content
+ content management
+ convergence
+ core competency
+ deliverables
+ dimension crossover
+ e-business
+ e-commerce
+ empowerment
+ end-users
+ eyeballs
+ face time
+ functionalities
+ infomediaries
+ infrastructures
+ initiatives
+ interfaces
+ intermediaries
+ key players
+ knowledge transfer
+ management by objective
+ markets
+ metrics
+ middleware
+ mindshare
+ multilevel perspective
+ networks
+ non-issues
+ niches
+ objectives
+ paradigms
+ paradigm shifts
+ partnerships
+ platforms
+ portals
+ quality-circles
+ reality checks
+ relationship corridors
+ relationships
+ resources
+ return on investment
+ synergies
+ schemas
+ skill sets
+ solutions
+ strategic alliances
+ supply-chains
+ synergical connectivity
+ tangents
+ technologies
+ total quality management
+ version control
+ vision
+
+[buzzword-adjective] asp
+ b2b
+ b2c
+ p2p
+ back-end
+ best-of-breed
+ bilateral
+ bleeding-edge
+ bricks-and-clicks
+ client-centered
+ cross-platform
+ cross-media
+ customer-centric
+ customized
+ cutting-edge
+ distributed
+ dot-com
+ dynamic
+ efficient
+ effort-intensive
+ end-to-end
+ enterprise
+ evolutionary
+ extensible
+ forward-thinking
+ frictionless
+ front-end
+ future-proof
+ global
+ granular
+ innovative
+ integrated
+ interactive
+ intuitive
+ just-in-time
+ killer
+ leading-edge
+ legacy
+ magnetic
+ marketable
+ massively-parallel
+ mission-critical
+ multilevel
+ next-generation
+ object-oriented
+ off-the-shelf
+ one-to-one
+ open-source
+ pragmatic
+ proactive
+ productized
+ real-time
+ revolutionary
+ robust
+ scalable
+ seamless
+ strategic
+ synergistic
+ transparent
+ turn-key
+ two-tier
+ ubiquitous
+ universal
+ user-centric
+ value-added
+ vertical
+ viral
+ virtual
+ visionary
+ wireless
+ world-class
+
+[buzzword-job] customizer
+ dothead
+ enabler
+ engineer
+ facilitator
+ forward-thinker
+ incubator
+ innovator
+ intergrator
+ liason
+ manager
+ marketer
+ strategist
+ synergizer
+ visionary
+
+[buzzword-stem] aggregat
+ benchmark
+ conceptual
+ empower
+ enhanc
+ exploit
+ generat
+ harness
+ implement
+ leverag
+ monet
+ morph
+ orchestr
+ product
+ reformul
+ reinvent
+ revolution
+ spearhead
+ synerg
+ synthes
+ trivial
+ util
+ visual
+
+[buzzword-suffix] age
+ ivize
+ ivize
+ ivate
+ ilate
+ [buzzword+consonant]
+ acity
+ ocity
+
+[buzzword+consonant] i [consonant] ate
+
+pragma export-rule [buzzword-suffix]
+pragma export-rule [buzzword-stem]
diff --git a/RGens/data/sample-grammars/career.gram b/RGens/data/sample-grammars/career.gram
new file mode 100644
index 0000000..f429e97
--- /dev/null
+++ b/RGens/data/sample-grammars/career.gram
@@ -0,0 +1,52 @@
+[career-tech] [career-prefix] paper pusher
+ [career-prefix] computer programmer
+ [career-prefix] sheet spreader
+ data entry [career-suffix]
+ [career-prefix] webpage designer
+ [career-prefix] button pusher
+ [career-prefix] bug terminator
+ help desk [career-suffix]
+ [career-prefix] software reinstaller
+ software engineering [career-suffix]
+ [career-prefix] system administrator
+ [career-prefix] bastard operator from hell
+ [career-prefix] webmaster
+ [career-prefix] dead chicken waver
+ [career-prefix] information technology [career-suffix]
+ [career-prefix] four-color glossy publisher
+ [career-prefix] corporate spy [career-suffix]
+ [career-prefix] trade show booth bunny
+ evil human resources [career-suffix]
+ [career-prefix] internet [career-suffix]
+ [career-prefix] network administrator
+ [career-prefix] software design [career-suffix]
+
+pragma initial-rule [career-tech]
+
+[career-prefix] executive
+ assistant
+ junior
+ senior
+ associate
+ sub-adjunct
+ part-time
+ interrim
+ substitute
+
+[career-suffix] manager
+ assistant manager
+ supervisor
+ flunkie
+ intern
+ department manager
+ secretary
+ boss
+ department janitor
+ foreman
+ director
+ section chief
+ superintendant
+ department chairman
+ overseer
+ department head honcho
+ administrator
diff --git a/RGens/data/sample-grammars/city.gram b/RGens/data/sample-grammars/city.gram
new file mode 100644
index 0000000..5294cd0
--- /dev/null
+++ b/RGens/data/sample-grammars/city.gram
@@ -0,0 +1,95 @@
+[city] [real-city]
+ [real-city]
+ [town-name]
+ [town-name]
+ [town-prefix] [town-name]
+ [town-prefix] [town-name+suffix]
+ [natural-color] [geographic-thing]
+ [natural-color+suffix]
+ [natural-color] [tree]
+ [town-prefix+suffix]
+ [town-prefix] [geographic-thing]
+ [tree+suffix]
+ [random-name]
+ [town-prefix] [random-name]
+ [random-name+suffix]
+ [last-name]
+ [last-name]
+ [town-prefix] [last-name]
+ [2+last-name]
+ St. [last-name]
+ [last-name+suffix]
+ [first-name] [geographic-thing]
+ [first-name+suffix]
+
+pragma initial-rule [city]
+
+[town-name+suffix] [town-name] [town-suffix]
+
+[natural-color+suffix] [natural-color] [town-suffix]
+
+[town-prefix+suffix] [town-prefix] [town-suffix]
+
+[tree+suffix] [tree] [town-suffix]
+
+[random-name+suffix] [random-name] [town-suffix]
+
+[2+last-name] [last-name] - [last-name]
+
+[last-name+suffix] [last-name] [town-suffix]
+
+[first-name+suffix] [first-name] [town-suffix]
+
+[geographic-thing] mountain
+ hill
+ lake
+ plains
+ river
+ valley
+ hollow
+ beach
+ bay
+ harbor
+ grove
+ bridge
+ station
+ glade
+ forest
+ gulch
+ swamp
+ bend
+ springs
+ creek
+ falls
+ ridge
+ pass
+ meadow
+
+[town-prefix] north
+ south
+ east
+ west
+ north
+ south
+ east
+ west
+ new
+ new
+ old
+ little
+ fort
+ lower
+ upper
+ san
+ la
+ van
+
+[town-suffix] burg
+ ton
+ ville
+ opolis
+ field
+ boro
+ dale
+
+pragma export-rule [geographic-thing]
diff --git a/RGens/data/sample-grammars/college.gram b/RGens/data/sample-grammars/college.gram
index 6e657fa..2b4fbf9 100644
--- a/RGens/data/sample-grammars/college.gram
+++ b/RGens/data/sample-grammars/college.gram
@@ -82,7 +82,7 @@ pragma export-rule [college-course]
the meaning of life as [course-explored] in [course-group1] [course-group2] [course-medium]
the [course-impact] of [course-group2] [thinker-type] on [course-contemporary] [university-subject] : [course-ending]
the [rise] of [course-group2] [thinker-type] in [course-contemporary] [university-subject] : [course-ending]
- [course-ancient] [course-medium] as the [roots] of [course-contemporary] [university-subject]]
+ [course-ancient] [course-medium] as the [roots] of [course-contemporary] [university-subject]
[course-buzzword2] , [course-buzzword2] and [course-buzzword2] as [course-explored] in [course-contemporary] [films] : [course-ending]
the history of [course-group2] [course-life] : [course-ending]
the [archetype] of the [quest] in [course-group1] [course-group2] [course-medium]
@@ -255,7 +255,7 @@ pragma export-rule [college-course]
in the 21st century
in recent times
in the real world
- in the [college-adj] world
+ in the [course-adj] world
[course-ending] ideas in conflict
ideas in transition
@@ -510,9 +510,64 @@ pragma export-rule [college-course]
the [course-impact] of [course-ancient] [course-medium] on [course-contemporary] [university-subject]
the [course-impact] of [course-ancient] [course-medium] on [course-contemporary] [course-adj] [course-noun]
the [course-impact] of [course-group1] [course-group2] [course-medium] on [course-contemporary] [course-adj] [course-noun]
- the [course-impact] of [course-group1] [course-group2] [course-medim] on [university-subject]
+ the [course-impact] of [course-group1] [course-group2] [course-medium] on [university-subject]
[course-impact] impact
effect
consequences
influence
+
+[university] [university-body] [university-suffix]
+
+[university-body] [cardinal] [us-state]
+ central [us-state]
+ [us-president]
+ [city]
+ [real-city]
+ [last-name]
+ [person]
+
+pragma export-rule [university]
+
+[university-suffix] university
+ college
+ community college
+ state university
+ state college
+ ivy league college
+
+[university-subject] [hard-science]
+ [soft-science]
+
+[hard-science] quantum mechanics
+ planar geometry
+ vector calculus
+ theoretical physics
+ microbiology
+ abstract mathmatics
+ oceanography
+ extraterrestrial biology
+ fractal geometry
+ quantum string theory
+ linear algebra
+ computer science
+
+[soft-science] abnormal psychology
+ anthropology
+ legal theories
+ [soft-type] sociology
+ microeconomics
+ political science
+
+[soft-type] urban
+ suburban
+ rural
+
+[college-major-tech] computer science
+ information technology
+ computer techology
+ mathematics
+ advanced mathematics nobody ever uses
+ applied physics
+ information systems
+ software engineering
diff --git a/RGens/data/sample-grammars/company.gram b/RGens/data/sample-grammars/company.gram
new file mode 100644
index 0000000..19e0f0b
--- /dev/null
+++ b/RGens/data/sample-grammars/company.gram
@@ -0,0 +1,170 @@
+[company] [last-name] [company-suffix]
+ [last-name] [company-name+suffix]
+ [plural+first] [company-name]
+ [last-name] , [last-name] and [last-name] [company-name+suffix]
+ [last-name] , [last-name] and [last-name] [company-suffix]
+ [2last+name] [company-name]
+ [2last+name] [company-suffix]
+ [2last+name] [company-name+suffix]
+ [last-name] & [last-name] [company-suffix]
+ [last-name] & [last-name] [company-name+suffix]
+ [first-name] [last-name] [company-name]
+ [first-name] [last-name] [company-suffix]
+ [first-name] [last-name] [company-name+suffix]
+ [acronym] [company-name+suffix]
+ [acronym] [company-name]
+ [acronym] [company-root-suffix] [company-suffix]
+ [full-name] [company-name+suffix]
+ [last-name] [company-root-suffix] [company-suffix]
+ [last-name] [company-root-suffix]
+ [2letter+letter] [company-name+suffix]
+ [letter+letter] [company-name]
+ [first-name] [company-root-suffix] [company-suffix]
+ [city] [company-name+suffix]
+ [city] [company-root-suffix]
+ [us-state] [company-name+suffix]
+ [buzzword-adjective] [buzzword-noun] [company-suffix]
+ [media-company]
+ [newspaper]
+ [real-company]
+
+pragma export-rule [company]
+
+[plural+first] [first-name] 's
+
+[company-name+suffix] [company-name] [company-suffix]
+
+[2last+name] [last-name] - [last-name]
+
+[2letter+letter] [letter] [letter] & [letter]
+
+[letter+letter] [letter] & [letter]
+
+# The extra space is supposed to be there
+[company-suffix] [company-suffix1]
+ [company-suffix2]
+
+[company-suffix1] Inc.
+ Incorporated
+ Ltd.
+ Corp.
+ Corporation
+ Co.
+ Company
+ Cooperative
+ Amalgamated
+
+[company-suffix2] , Inc.
+ , Incorporated
+ , Ltd.
+ , LLC
+
+[company-name] associated
+ united
+ brothers
+ associates
+ gizmos
+ industries
+ products
+ widgets
+ farms
+ technology
+ electronics
+ communications
+ media
+ network
+ networking
+ software
+ computers
+ general store
+ stores
+ restaurants
+ design
+ construction
+ retail
+ manufacturing
+ ranch
+ ambulance chasers
+ attorneys at law
+ polluters
+ real estate
+ bank
+ railroad
+ consultants
+ publishing
+ holdings
+ services
+ utilities
+ and company [company-name]
+ and company
+ and co. [company-name]
+ and co.
+ of [city]
+
+[company-root-suffix] .com
+ .net
+ dot com
+ ware
+ soft
+ way
+ Co
+ co
+ tech
+
+[dotcom-company] [actual+dotcom-company]
+
+[actual+dotcom-company] [buzzword-adjective] .com
+ [acronym] .com
+ [dotcom-start] [newspaper-pair2] .com
+ [trademark] .com
+
+[tech-company] microsoft
+ america online
+ yahoo!
+ ebay
+ amazon.com
+ sun microsystems
+ va linux
+ red hat
+ oracle
+ corel
+ ibm
+ lucent technologies
+ earthlink
+ verio
+ lycos
+ altavista
+ cnet
+ citrix systems
+ intuit
+ exodus communications
+ verisign
+ inktomi
+ qualcomm
+ cisco systems
+ dell computers
+ gateway
+ jds uniphase
+ at&t
+ mci
+ apple
+ be, inc.
+ caldera
+ compaq
+ intel
+ amd
+ cyrix
+ motorola
+ sgi
+ transmeta
+ inprise
+ hewlett-packard
+
+[corp-job-title] president
+ vice president
+ chief executive officer
+ chief financial officer
+ public relations director
+ chief technology officer
+ board chairman
+ director
diff --git a/RGens/data/sample-grammars/computer.gram b/RGens/data/sample-grammars/computer.gram
new file mode 100644
index 0000000..9f9fb6f
--- /dev/null
+++ b/RGens/data/sample-grammars/computer.gram
@@ -0,0 +1,34 @@
+[computer-language] c
+ c
+ c++
+ c++
+ objective c
+ perl
+ python
+ java
+ javascript
+ basic
+ visual basic
+ awk/sed
+ bash
+ x86 assembly
+ pascal
+ cobol
+ forth
+ scheme
+ lisp
+ tcl/tk
+ ada
+ dos batch files
+
+pragma export-rule [computer-language]
+pragma export-rule [computer-skill]
+
+[computer-skill] html
+ xml
+ cgi scripting
+ photoshop
+ autocad
+ sql
+ asp
+ php
diff --git a/RGens/data/sample-grammars/congress.gram b/RGens/data/sample-grammars/congress.gram
new file mode 100644
index 0000000..cffe469
--- /dev/null
+++ b/RGens/data/sample-grammars/congress.gram
@@ -0,0 +1,35 @@
+[congress-critter] [critter-type] [critter-name]
+
+pragma initial-rule [congress-critter]
+
+[critter-type] senator
+ representative
+
+[critter-name] [last-name]
+ [critter-name2]
+
+[critter-name2] fattecat
+ becon
+ p. ork
+ g. raft
+ phil e. buster
+ phil t. rich
+ iva gottalot
+ erna bigcheque
+ billy o'naire
+ c. a. pitalist
+ noah morals
+ lucy morrals
+ buford fatbacke
+ c. r. pette-bagger
+ k. ickbach
+ lobb e. ist
+ p. orkbarrel
+ phil e. buster
+ p. urgery
+ l. ibel
+ s. lander
+ i. b. fersaile
+ pettie k. ash
+ c. l. inton
+ dee septive
diff --git a/RGens/data/sample-grammars/dates.gram b/RGens/data/sample-grammars/dates.gram
new file mode 100644
index 0000000..1ed0daa
--- /dev/null
+++ b/RGens/data/sample-grammars/dates.gram
@@ -0,0 +1,20 @@
+[day-of-week] sunday
+ monday
+ tuesday
+ wednesday
+ thursday
+ friday
+ saturday
+
+[month] january
+ february
+ march
+ april
+ may
+ june
+ july
+ august
+ september
+ october
+ november
+ december
diff --git a/RGens/data/sample-grammars/diablo-ii/diabloii.gram b/RGens/data/sample-grammars/diablo-ii/diabloii.gram
index 652d38f..712c491 100755
--- a/RGens/data/sample-grammars/diablo-ii/diabloii.gram
+++ b/RGens/data/sample-grammars/diablo-ii/diabloii.gram
@@ -13,9 +13,9 @@ pragma initial-rule [base-treasures]
[money]
nothing
-[money] [amount] [money-type]
+[money] [diablo-amount] [money-type]
-[amount] 1
+[diablo-amount] 1
5
10
20
@@ -25,6 +25,8 @@ pragma initial-rule [base-treasures]
500
1000
+pragma export-rule [diablo-amount]
+
[money-type] [metal-type] coin(s)
[metal-type] copper
diff --git a/RGens/data/sample-grammars/diablo-ii/diabloiiitems.gram b/RGens/data/sample-grammars/diablo-ii/diabloiiitems.gram
index 4e1d085..a1bb40d 100755
--- a/RGens/data/sample-grammars/diablo-ii/diabloiiitems.gram
+++ b/RGens/data/sample-grammars/diablo-ii/diabloiiitems.gram
@@ -135,7 +135,7 @@ pragma prefix-with [swords] [sword-kind]
battle
great
-[bows] arrow ( [amount] count)
+[bows] arrow ( [diablo-amount] count)
bow
[bow-size] bow
[bow-type] bow
@@ -149,7 +149,7 @@ pragma prefix-with [swords] [sword-kind]
battle
war
-[crossbows] bolt ( [amount] count)
+[crossbows] bolt ( [diablo-amount] count)
crossbow
[crossbow-type] crossbow
diff --git a/RGens/data/sample-grammars/diablo-ii/diabloiiprefixes.gram b/RGens/data/sample-grammars/diablo-ii/diabloiiprefixes.gram
index 40b36b0..3ea3034 100755
--- a/RGens/data/sample-grammars/diablo-ii/diabloiiprefixes.gram
+++ b/RGens/data/sample-grammars/diablo-ii/diabloiiprefixes.gram
@@ -9,7 +9,7 @@
[personal-stat]
[to-hit]
[extra-damage]
- [to-hit+damage]
+ [to-hit-damage]
[item-charges]
pragma export-rule [prefix]
@@ -156,7 +156,7 @@ pragma export-rule [prefix]
ruthless
merciless
-[to-hit+damage] sharp
+[to-hit-damage] sharp
fine
warrior’s
soldier’s
diff --git a/RGens/data/sample-grammars/firstname-female.long b/RGens/data/sample-grammars/firstname-female.long
deleted file mode 100644
index a1c7c1c..0000000
--- a/RGens/data/sample-grammars/firstname-female.long
+++ /dev/null
@@ -1,532 +0,0 @@
-Abigail
-Ada
-Adrienne
-Agnes
-Alberta
-Alexandra
-Alexis
-Alice
-Alicia
-Alison
-Allison
-Alma
-Alyssa
-Amanda
-Amber
-Amelia
-Amy
-Ana
-Andre
-Andrea
-Angel
-Angela
-Angelica
-Angelina
-Angie
-Anita
-Ann
-Anna
-Anne
-Annette
-Annie
-Antoinette
-Antonia
-April
-Ariane
-Ariel
-Arlene
-Ashley
-Audrey
-Barbara
-Beatrice
-Becky
-Belinda
-Bernadette
-Bernice
-Bertha
-Bessie
-Beth
-Bethany
-Betsy
-Betty
-Beulah
-Beverly
-Billie
-Blanca
-Blanche
-Bobbie
-Bonnie
-Brandi
-Brandy
-Brenda
-Brianna
-Bridget
-Brittany
-Brooke
-Caitlin
-Camille
-Candace
-Candice
-Carla
-Carmen
-Carol
-Carole
-Caroline
-Carolyn
-Carrie
-Casey
-Cassandra
-Catherine
-Cathy
-Cecelia
-Cecilia
-Celia
-Charlene
-Charlotte
-Chelsea
-Cheryl
-Chloe
-Christian
-Christie
-Christina
-Christine
-Christy
-Cindy
-Claire
-Clara
-Claudia
-Colleen
-Connie
-Constance
-Cora
-Courtney
-Cristina
-Crystal
-Cynthia
-Daisy
-Dana
-Danielle
-Darla
-Darlene
-Dawn
-Deanna
-Debbie
-Deborah
-Debra
-Delia
-Della
-Delores
-Denise
-Desiree
-Diana
-Diane
-Dianna
-Dianne
-Dion
-Dixie
-Dolores
-Dominique
-Donna
-Dora
-Doreen
-Doris
-Dorothy
-Ebony
-Edith
-Edna
-Eileen
-Elaine
-Eleanor
-Elena
-Elisa
-Elizabeth
-Ella
-Ellen
-Eloise
-Elsa
-Elsie
-Elvira
-Emily
-Emma
-Erica
-Erika
-Erin
-Erma
-Ernestine
-Essie
-Estelle
-Esther
-Ethel
-Eula
-Eunice
-Eva
-Evelyn
-Faith
-Fannie
-Faye
-Felicia
-Felicity
-Flora
-Florence
-Frances
-Francis
-Freda
-Gabriel
-Gabrielle
-Gail
-Gayle
-Geneva
-Genevieve
-Georgia
-Geraldine
-Gertrude
-Gina
-Ginger
-Gladys
-Glenda
-Gloria
-Grace
-Gretchen
-Guadalupe
-Gwen
-Gwendolyn
-Haley
-Hannah
-Harriet
-Hattie
-Hazel
-Heather
-Heidi
-Helen
-Henrietta
-Hilda
-Hillary
-Holly
-Hope
-Ida
-Inez
-Irene
-Iris
-Irma
-Isabel
-Isabella
-Jackie
-Jacqueline
-Jacquelyn
-Jade
-Jaime
-Jamie
-Jan
-Jana
-Jane
-Janet
-Janice
-Janie
-Janis
-Jasmine
-Jean
-Jeanette
-Jeanne
-Jeannette
-Jeannie
-Jenna
-Jennie
-Jennifer
-Jenny
-Jessica
-Jessie
-Jill
-Jo
-Joan
-Joann
-Joanna
-Joanne
-Jodi
-Jody
-Johanna
-Johnnie
-Josefina
-Josephine
-Joy
-Joyce
-Juana
-Juanita
-Judith
-Judy
-Julia
-Julie
-June
-Kaitlyn
-Kara
-Karen
-Kari
-Karla
-Kate
-Katelyn
-Katherine
-Kathleen
-Kathryn
-Kathy
-Katie
-Katrina
-Kay
-Kayla
-Kelley
-Kelli
-Kellie
-Kelly
-Kelsey
-Kendra
-Kerry
-Kim
-Kimberly
-Krista
-Kristen
-Kristi
-Kristie
-Kristin
-Kristina
-Kristine
-Kristy
-Krystal
-Lana
-Latoya
-Laura
-Lauren
-Laurie
-Laverne
-Leah
-Lee
-Leigh
-Lela
-Lena
-Leona
-Leslie
-Leticia
-Lila
-Lillian
-Lillie
-Linda
-Lindsay
-Lindsey
-Lisa
-Lois
-Lola
-Lora
-Lorena
-Lorene
-Loretta
-Lori
-Lorraine
-Louise
-Lucia
-Lucille
-Lucy
-Lula
-Luz
-Lydia
-Lynda
-Lynette
-Lynn
-Lynne
-Mabel
-Mable
-Mackenzie
-Madeline
-Madison
-Mae
-Magdalena
-Maggie
-Mamie
-Mandy
-Marcella
-Marcia
-Margaret
-Margarita
-Marge
-Margie
-Marguerite
-Maria
-Mariah
-Marian
-Marianne
-Marie
-Marilyn
-Marion
-Marjorie
-Marlene
-Marsha
-Marta
-Martha
-Mary
-Maryann
-Mattie
-Maureen
-Maxine
-May
-Megan
-Meghan
-Melanie
-Melba
-Melinda
-Melissa
-Melody
-Mercedes
-Meredith
-Michele
-Michelle
-Mildred
-Mindy
-Minnie
-Miranda
-Miriam
-Misty
-Molly
-Mona
-Monica
-Monique
-Morgan
-Muriel
-Myra
-Myrtle
-Nadine
-Nancy
-Naomi
-Natalie
-Natasha
-Nellie
-Nettie
-Nichole
-Nicole
-Nina
-Nora
-Norma
-Olga
-Olive
-Olivia
-Ollie
-Opal
-Ora
-Paige
-Pam
-Pamela
-Pat
-Patricia
-Patsy
-Patti
-Patty
-Paula
-Paulette
-Pauline
-Pearl
-Peggy
-Penny
-Phyllis
-Priscilla
-Rachael
-Rachel
-Ramona
-Raquel
-Raven
-Rebecca
-Regina
-Renee
-Rhonda
-Rita
-Roberta
-Robin
-Robyn
-Rochelle
-Rosa
-Rosalie
-Rose
-Rosemarie
-Rosemary
-Rosie
-Roxanne
-Ruby
-Ruth
-Sabrina
-Sadie
-Sally
-Samantha
-Sandra
-Sandy
-Sara
-Sarah
-Shannon
-Shari
-Sharon
-Shawna
-Sheila
-Shelia
-Shelley
-Shelly
-Sheri
-Sherri
-Sherry
-Sheryl
-Shirley
-Silvia
-Sonia
-Sonja
-Sonya
-Sophia
-Sophie
-Stacey
-Stacy
-Stella
-Stephanie
-Sue
-Susan
-Susie
-Suzanne
-Sydney
-Sylvia
-Tabitha
-Tamara
-Tami
-Tammy
-Tanya
-Tara
-Tasha
-Taylor
-Teresa
-Teri
-Terri
-Terry
-Thelma
-Theresa
-Tiffany
-Tina
-Toni
-Tonya
-Tracey
-Traci
-Tracy
-Tricia
-Valerie
-Vanessa
-Velma
-Vera
-Verna
-Veronica
-Vicki
-Vickie
-Vicky
-Victoria
-Viola
-Violet
-Virginia
-Vivian
-Wanda
-Wendy
-Whitney
-Willie
-Wilma
-Winifred
-Yasmine
-Yolanda
-Yvette
-Yvonne
-Zoe
diff --git a/RGens/data/sample-grammars/firstname-male.long b/RGens/data/sample-grammars/firstname-male.long
deleted file mode 100644
index f6d3ce5..0000000
--- a/RGens/data/sample-grammars/firstname-male.long
+++ /dev/null
@@ -1,624 +0,0 @@
-Aaron
-Abel
-Abraham
-Adam
-Adolph
-Adrian
-Al
-Alan
-Albert
-Alberto
-Alejandro
-Alex
-Alexander
-Alfonso
-Alfred
-Alfredo
-Allan
-Allen
-Alonzo
-Alton
-Alvin
-Amos
-Andre
-Andreas
-Andres
-Andrew
-Andy
-Angel
-Angelo
-Angus
-Anthony
-Antoine
-Anton
-Antonio
-Archie
-Armando
-Arnold
-Art
-Arthur
-Arturo
-Aubrey
-Aubrie
-Austin
-Barry
-Bart
-Bayard
-Ben
-Benjamin
-Bennie
-Benny
-Benoit
-Bernard
-Bernhard
-Bert
-Bill
-Billy
-Blake
-Bob
-Bobby
-Boris
-Boyd
-Brad
-Bradford
-Bradley
-Brandon
-Brendan
-Brent
-Brett
-Brian
-Bruce
-Bruno
-Bryan
-Bryant
-Bryce
-Byron
-Caleb
-Calvin
-Cameron
-Carl
-Carlos
-Carlton
-Carroll
-Cary
-Casey
-Cecil
-Cecilie
-Cedric
-Cesar
-Chad
-Charles
-Charlie
-Chester
-Chris
-Christian
-Christopher
-Clarence
-Clark
-Claude
-Clay
-Clayton
-Cliff
-Clifford
-Clifton
-Clint
-Clinton
-Clyde
-Cody
-Cole
-Colin
-Connor
-Conrad
-Corey
-Cornelius
-Cory
-Courtney
-Craig
-Crispin
-Curtis
-Dale
-Dallas
-Damon
-Dan
-Dana
-Daniel
-Danny
-Darin
-Darnell
-Darrel
-Darrell
-Darren
-Darrin
-Darryl
-Daryl
-Dave
-David
-Dean
-Delbert
-Dennis
-Derek
-Derrick
-Deven
-Devin
-Dewey
-Dexter
-Dick
-Diego
-Dieter
-Dimitri
-Dimitrius
-Domingo
-Dominic
-Dominick
-Dominique
-Don
-Donald
-Donnie
-Doug
-Douglas
-Doyle
-Drazen
-Drew
-Duane
-Dustin
-Dwayne
-Dwight
-Dylan
-Earl
-Earnest
-Ed
-Eddie
-Edgar
-Edmond
-Edmund
-Eduardo
-Edward
-Edwin
-Elbert
-Elias
-Elijah
-Ellis
-Elmer
-Emanuel
-Emilio
-Emmett
-Enrico
-Enrique
-Eric
-Erick
-Erik
-Ernest
-Ernesto
-Ervin
-Ethan
-Eugene
-Evan
-Everett
-Felipe
-Felix
-Fernando
-Floyd
-Forrest
-Fox
-Francis
-Francisco
-Frank
-Frankie
-Franklin
-Franky
-Fred
-Freddie
-Freddy
-Frederic
-Frederick
-Fredrick
-Fredrik
-Gabe
-Gabriel
-Garrett
-Garry
-Garth
-Gary
-Gavin
-Gene
-Geoff
-Geoffrey
-George
-Gerald
-Gerard
-Gerardo
-Gilbert
-Gilberto
-Glen
-Glenn
-Gordon
-Grady
-Graham
-Grant
-Greg
-Gregg
-Gregor
-Gregory
-Guadalupe
-Guillermo
-Gunnar
-Gustavo
-Guy
-Hans
-Harold
-Harry
-Harvey
-Hector
-Henrik
-Henry
-Herald
-Herb
-Herbert
-Herman
-Homer
-Horace
-Howard
-Hubert
-Hugh
-Hugo
-Hunter
-Iain
-Ian
-Ignacio
-Igor
-Ira
-Irvin
-Irving
-Isaac
-Ismael
-Israel
-Ivan
-Jack
-Jackie
-Jacob
-Jacques
-Jaime
-Jake
-James
-Jamie
-Jan
-Jared
-Jarret
-Jason
-Javier
-Jay
-Jean
-Jeff
-Jeffery
-Jeffrey
-Jerald
-Jeremiah
-Jeremy
-Jermaine
-Jeroen
-Jerome
-Jerry
-Jesse
-Jessie
-Jesus
-Jim
-Jimmie
-Jimmy
-Jody
-Joe
-Joel
-Joey
-Johan
-John
-Johnathan
-Johnnie
-Johnny
-Jon
-Jonathan
-Jonathon
-Jordan
-Jorge
-Jose
-Joseph
-Josh
-Joshua
-Juan
-Julian
-Julio
-Julius
-Justin
-Karl
-Karlo
-Kasper
-Keith
-Kelly
-Kelvin
-Ken
-Kenneth
-Kenny
-Kent
-Kerry
-Kevin
-Kim
-Kirk
-Klaus
-Kris
-Kristian
-Kristopher
-Kurt
-Kyle
-Lamar
-Lance
-Larry
-Lars
-Lauren
-Laurence
-Laurie
-Lawrence
-Lee
-Leland
-Lenny
-Leo
-Leon
-Leonard
-Leonardo
-Leroy
-Leslie
-Lester
-Levi
-Lewis
-Lex
-Liam
-Lindsay
-Linus
-Lionel
-Lloyd
-Logan
-Lonnie
-Loren
-Lorenzo
-Louis
-Lowell
-Lucas
-Luigi
-Luis
-Luke
-Luther
-Lyle
-Lynn
-Mack
-Magnus
-Malcolm
-Manuel
-Marc
-Marcelo
-Marco
-Marcos
-Marcus
-Marek
-Mario
-Marion
-Mark
-Marlon
-Marshall
-Martin
-Marty
-Marvin
-Mathew
-Matt
-Matthew
-Matthias
-Maurice
-Max
-May
-Mel
-Melvin
-Merle
-Michael
-Micheal
-Miguel
-Mike
-Miles
-Milton
-Mitch
-Mitchell
-Morris
-Morten
-Moses
-Muhammed
-Myron
-Nathan
-Nathaniel
-Neal
-Ned
-Neil
-Nelson
-Neville
-Nic
-Nicholas
-Nick
-Nicola
-Nicolas
-Niels
-Nigel
-Nils
-Noah
-Noel
-Norbert
-Norm
-Norman
-Oliver
-Omar
-Orion
-Orlando
-Orville
-Oscar
-Otis
-Owen
-Pablo
-Pat
-Patrick
-Paul
-Paulo
-Pedro
-Percy
-Perry
-Pete
-Peter
-Phil
-Philip
-Philippe
-Phillip
-Pierre
-Preston
-Rafael
-Ralph
-Ramiro
-Ramon
-Randal
-Randall
-Randolph
-Randy
-Rasmus
-Raul
-Ray
-Raymond
-Reginald
-Reinhard
-Rene
-Rex
-Rhys
-Ricardo
-Richard
-Rick
-Rickey
-Ricky
-Rob
-Robbie
-Robert
-Roberto
-Robin
-Rod
-Roderick
-Rodney
-Rodolfo
-Rodrigo
-Roel
-Roelof
-Rogelio
-Roger
-Roland
-Rolando
-Rolf
-Roman
-Ron
-Ronald
-Ronnie
-Roosevelt
-Rory
-Ross
-Roy
-Ruben
-Rudolph
-Rudy
-Rufus
-Russ
-Russell
-Ryan
-Salvador
-Salvatore
-Sam
-Sammy
-Samuel
-Sander
-Santiago
-Santos
-Saul
-Scott
-Sean
-Sergei
-Sergio
-Seth
-Shane
-Shannon
-Shaun
-Shawn
-Sheldon
-Sherman
-Sid
-Sidney
-Simon
-Skip
-Slobodan
-Sonny
-Spencer
-Stan
-Stanley
-Stefan
-Stein
-Stephan
-Stephano
-Stephen
-Steve
-Steven
-Stewart
-Stuart
-Sulaiman
-Sunny
-Susie
-Sven
-Sylvester
-Taylor
-Ted
-Terence
-Terrance
-Terrell
-Terrence
-Terry
-Thad
-Theodore
-Thomas
-Tim
-Timmy
-Timothy
-Toby
-Todd
-Tom
-Tomas
-Tommie
-Tommy
-Tony
-Tracy
-Travis
-Trevor
-Trey
-Tristan
-Troy
-Tyler
-Tyrone
-Vernon
-Victor
-Vince
-Vincent
-Virgil
-Wade
-Wallace
-Walter
-Warren
-Wayne
-Wendell
-Wesley
-Wilbert
-Wilbur
-Wilfred
-Will
-Willard
-William
-Willie
-Willis
-Wilson
-Winston
-Woodrow
-Xavier
-Yuri
-Zachary
diff --git a/RGens/data/sample-grammars/fortune.gram b/RGens/data/sample-grammars/fortune.gram
index 8ab63b1..b0252d1 100644
--- a/RGens/data/sample-grammars/fortune.gram
+++ b/RGens/data/sample-grammars/fortune.gram
@@ -5,10 +5,10 @@
you will be help hostage by the radical [org-political]
you will be run over by a [bus]
you will find yourself as the victim of a bizzare practical joke
- you will contract a rare form of [last-name] 's disease
+ you will contract a rare form of [plural+last-name] disease
you will grow fat and bald
you will lose your present job and have to become a [job]
- you will run for public office and only recieve [half-digit] % of the vote
+ you will run for public office and only recieve [half-digit+percent] of the vote
your spouse will eventually find out about you-know what
you will accidentally run over your neighbor's pet [animal] and be sued for [half-digit] million dollars.
you will arrive late at work only to realize that it's a federal holiday
@@ -20,7 +20,7 @@
you will lose your job because of your involvement in the [org-political]
you will find the perfect joke to play on your [relative] on april fool's day, only to discover that it's actually april 2nd
your television will explode while the [big-game] is on
- you will recieve a [digit-no0] [digit] [digit] , [digit] [digit] [digit] [bill-type] bill by mistake
+ you will recieve a [large+bill] [bill-type] bill by mistake
you will find a counterfeit [counter-bill] bill on the ground
you will discover that everybody really is out to get you
you will become successful in business -- unfortunately, that business will violate the laws of [state-num]
@@ -30,25 +30,54 @@
you will move into a mobile home park and then a tornado will strike the very next day
you will set a record high golf score
a black cat will run across your path today, but thankfully you aren't superstitious (at least not until you get run over by a bus this evening
- the engine in your [vehicle] will explode precisely [digit] . [digit] seconds after your warranty expires
+ the engine in your [vehicle] will explode precisely [ seconds after your warranty expires
while on a business trip to [real-city] you will get lost and wind up in [real-city]
you will shoot your eye out with a BB gun, just as your mother said you would
you will run out of gas on Interstate [interstate-num] in the vicinity of nowhere, [us-state] , population [low-num]
your website will be hit with the dreaded slashdot effect, causing your webserver to die a painful death
- you will be abducted by aliens and taken to the secret planet [random-name] [roman-num] for extensive probing
+ you will be abducted by aliens and taken to the secret planet [random-name] [roman-numeral] for extensive probing
you will become the editor for a tabloid newspaper
+ you will soon realize that your life is completely indistinguishable from "Dilbert" cartoons
+ you will hurt your hand while thumping a Bible
+ you will discover the meaning of life at the bottom of a beer bottle, but you won't remember what it is after you sober up in the morning
+ you will recieve a blank fortune cookie at a chinese restaurant, an event regarded by most superstition experts as a "bad omen"
+ you will be falsely accused of jaywalking
+ you will suffer a nosebleed during a speech in front of [speech-num]
+ you will recieve [fifty-above] credit card offers in the mail during the next week
+ you will recieve [speech+num] pieces of spam email during the next year
+ your favorite tv show will be cancelled and replaced with an infomercial
+ you will lose your life savings in las vegas
+ you will sign a contract requiring you to hand over your first born son to a large multinational corporation
+ your [progeny] will lose a spelling bee after misspelling [quote+name]
+ you will be declared a "town drunk" by your local city council
+ you will be responsible for an international incident
+ medical studies will reveal that your favorite [food] causes [bad-thing]
+ you will be deported to [nation]
+ you will realize that your life really is completely meaningless
+ you will appear on "who wants to be a millionaire?" and fail to answer the first $100 question
+ you will be sued by major league baseball for taping the world series on your vcr without prior written consent
+ you will be at the losing end of a [lawsuit-amount] lawsuit
+ you will recieve a [ticket-amount] dollar parking ticket from [real-city] even though you have never been there
+ every single time you visit the doctor's office, the doctor will be out playing golf
+ until the day you die, you will never understand what the saying "Life is like a bowl of cherries" actually means
+ your hometown baseball team will never win the world series
+ your brand-new [comp+amount] dollar computer will be struct by lightning [three-six] hours after you first plug it in
+ you will send the author of this fortune [hundred+amount] in plain, unmarked bills with the next week
+ you will be excommunicated from your church after you accidentally fall asleep and start snoring during services
+ your personal information will be in the hands of [ticket-amount] large, evil multinational corporations by the time you finish reading this fortune
pragma initial-rule [fortune-cookie]
-pragma range-rule half-digit 1 5
-pragma range-rule weekday 2 7
-pragma range-rule states 40 80
-pragma range-rule swamp 40 80
-pragma range-rule half-digit2 5 9
-pragma range-rule interstate-num 4 99
-pragma range-rule low-num 1 25
+pragma range-rule [half-digit] 1 5
+pragma range-rule [weekday] 2 7
+pragma range-rule [states] 40 80
+pragma range-rule [swamp] 40 80
+pragma range-rule [half-digit2] 5 9
+pragma range-rule [interstate-num] 4 99
+pragma range-rule [low-num] 1 25
+pragma range-rule [state-num] 30 49
-[vehichle] car
+[vehicle] car
truck
suv
minivan
@@ -72,3 +101,38 @@ pragma range-rule low-num 1 25
20
50
100
+
+[plural+last-name] [last-name] 's
+
+[half-digit+percent] [half-digit] %
+
+[large+bill] [digit-nozero] [digit] [digit] , [digit] [digit] [digit]
+
+[digit+digit] [digit] . [digit]
+
+[speech+num] [half-digit3] , [digit] [digit] [digit]
+
+pragma range-rule [half-digit3] 5 10
+pragma range-rule [fifty-above] 50 100
+
+[progeny] son
+ daughter
+
+[quote+name] " [random-name] "
+
+[food] food
+ beverage
+ snack
+
+[bad-thing] cancer
+ heart disease
+ insanity
+
+pragma range-rule [lawsuit-amount] 300 500
+pragma range-rule [ticket-amount] 100 500
+pragma range-rule [two-four] 2 4
+pragma range-rule [three-six] 3 6
+
+[comp+amount] [two-four] , [digit] [digit] [digit]
+
+[hundred+amount] $ [digit-nozero] 00
diff --git a/RGens/data/sample-grammars/genre-fiction.gram b/RGens/data/sample-grammars/genre-fiction.gram
index 09b0850..2504972 100755
--- a/RGens/data/sample-grammars/genre-fiction.gram
+++ b/RGens/data/sample-grammars/genre-fiction.gram
@@ -1,6 +1,7 @@
[genre-fict] in a [setting] a young [person] stumbles across a(n) [place] [genre-fict2]
-pragma initial-rule [genre-fict]
+# Uncomment me when we're done testing
+# pragma initial-rule [genre-fict]
[genre-fict2] which spurs him into conflict with [antagonist] [genre-fict3]
diff --git a/RGens/data/sample-grammars/insults.gram b/RGens/data/sample-grammars/insults.gram
index 59a4108..a6be75f 100644
--- a/RGens/data/sample-grammars/insults.gram
+++ b/RGens/data/sample-grammars/insults.gram
@@ -1,4 +1,4 @@
-[shakesphere-insult] Thou [insult-1] [insult2] [insult3]!
+[shakesphere-insult] Thou [insult-1] [insult-2] [insult-3]!
pragma initial-rule [shakesphere-insult]
diff --git a/RGens/data/sample-grammars/linux.gram b/RGens/data/sample-grammars/linux.gram
new file mode 100644
index 0000000..e125f0d
--- /dev/null
+++ b/RGens/data/sample-grammars/linux.gram
@@ -0,0 +1,942 @@
+[linux-domain] [actual+linux-domain]
+
+pragma initial-rule [linux-domain]
+
+[actual+linux-domain] [linux-domainname] . [big-tld]
+
+[linux-domainname] [linux-domain1] [linux-domain2]
+ [linux-domain1] [linux-domain2]
+ [linux-domain1] [linux-domain2]
+ [linux-domain1] [linux-domain1]
+ [linux-domain1] [linux-domain1]
+ [linux-domain1] [linux-domain1] [linux-domain2]
+ [linux-domain1] [linux-domain1] - [linux-domain2]
+ [linux-domain1] - [linux-domain2]
+ [linux-domain0] [linux-domain1]
+ [linux-domain0] [linux-domain1] [linux-domain2]
+ [linux-domain0] [linux-domain2]
+ [linux-domain1] . [domain-name]
+
+[linux-domain0] cmdr
+ captain
+ super
+ major
+ taco
+ cool
+ phat
+ burrito
+ coffee
+ mega
+ meta
+ slash
+ dot
+ colon
+ grok
+ about
+ 1st
+ just
+ everything
+ project
+ os
+ techno
+ source
+ the
+ open
+ free
+ new
+ colonel
+ go
+ wow
+ hot
+ uber
+ [first-name]
+
+
+[linux-domain1] linux
+ geek
+ nerd
+ hack
+ unix
+ bsd
+ freebsd
+ solaris
+ apache
+ gnu
+ opensource
+ penguin
+ tux
+ daemon
+ linus
+ hacker
+ root
+ kernel
+ perl
+ python
+ programming
+ bitbucket
+ null
+
+[linux-domain2] news
+ week
+ today
+ tommorrow
+ day
+ newbie
+ ware
+ cheesymerchandise
+ headlines
+ stuff
+ portal
+ power
+ shell
+ hack
+ fest
+ web
+ site
+ forum
+ community
+ dotcom
+ dotorg
+ fun
+ help
+ advice
+ world
+ network
+ net
+ humor
+ rules
+ warez
+ rulez
+ kiddie
+ geek
+ nerd
+ hacker
+ moneymakingportal
+ here
+ planet
+ city
+ place
+ chat
+ grok
+ one
+ central
+ plaza
+ 2000
+ search
+ find
+ finder
+ links
+ directory
+ apps
+ business
+ biz
+ archives
+ island
+ software
+ bandwagon
+ life
+ howto
+ mag
+ month
+ minute
+ chix
+ meat
+ women
+ docs
+ games
+ focus
+ [newspaper-pair2]
+ start
+ now
+ future
+ universe
+ galaxy
+ key
+ party
+ jobs
+ tech
+
+[linux-distro] red hat linux
+ debian gnu/linux
+ suse linux
+ turbolinux
+ stampede linux
+ caldera openlinux
+ slackware linux
+ linux mandrake
+ corel linux
+
+[linux-company] red hat
+ suse
+ caldera
+ corel
+ linuxcare
+ va linux
+ internet.com
+ cobalt networks
+ applix
+
+[linux-personality] linux torvalds
+ eric s. raymond
+ richard m. stallman
+ alan cox
+ bernharn rosenkraenzer
+ rik van riel
+ larry wall
+ bruce perens
+ miguel de icaza
+
+[microsoft-personality] bill gates
+ steve ballmer
+ ed muth
+ nathan myrrhvold
+
+[pundit-personality] jesse berst
+ fred moody
+ bob metcalfe
+
+[tech-columnist] [pundit-personality]
+ robert x. cringely
+ jon katz
+ nicholas petreley
+ john dvorak
+
+[linux-publication] linuxtoday
+ lwn
+ linuxworld
+ linux.com
+
+[linux-expo] [expo-body] [expo-suffix]
+
+pragma export-rule [linux-expo]
+
+[expo-body] [real-city] linux
+ [us-state] linux
+ linux
+ linuxworld
+ linuxexpo
+ linuxcon
+
+[expo-suffix] showcase
+ expo
+ conference
+ convention
+ show
+ money-making expo
+ phb get-together
+
+[tech-lawsuit-target] decss
+ napster
+ mp3.com
+ 2600
+
+[techgeek-target] dmca
+ microsoft
+ echelon
+ carnivore
+ "know your customer"
+ geek profiling
+ software patents
+
+[techgeek-enemy] microsoft
+ riaa
+ mpaa
+ dvd cca
+ network solutions
+
+[geek-people] hackers
+ geeks
+ nerds
+ kids
+ teenagers
+ [teen-type] teens
+ anonymous cowards
+ lurkers
+ flamers
+
+[teen-type] angst-ridden
+ troubled
+
+[geek-enemy] bible-thumpers
+ congresscritters
+ [parent-type] parents
+ recording industry executives
+ media tycoons
+ bureacrats
+ soccer moms
+ prohibitionists
+ lawyers
+ attorneys
+ lobbyists
+ pointy haired bosses
+ school administrators
+ thought police
+
+[parent-type] paranoid
+ clueless
+ hysterical
+
+[geek-badguys] script kiddies
+ hackers
+ crackers
+ spammers
+
+[geek-political-problem] censorship
+ software patents
+ carnivore
+ echelon
+ geek profiling
+ "know your customer"
+ domain snatching
+
+[tech-problem] script kiddies
+ spammers
+ crackers
+ backhoes
+ network outtages
+ system crashes
+
+[linux-error] lp1 on fire
+ kernel panic
+ signal 11
+ security hole found between chair and monitor
+ user needs a cluestick
+ this ain't windows
+ bus error
+ black hole imminent
+ segmentation fault
+
+[tech-topic] bogus patents
+ artificial intelligence
+ embedded systems
+ dotcom meltdown
+ hackers/crackers
+ spam
+ windows [windows-version] security exploits
+
+[geek-entertainment] star wars
+ star wars
+ the matrix
+ star trek: [trek-type]
+ star tek
+ the simpsons
+ x-files
+ babylon 5
+ mst3k
+
+[trek-type] tos
+ tng
+ ds9
+ voyager
+
+[geek-scifi-book] the [geek-scifi-people] of the [geek-scifi-alien] [geek-scifi-place]
+ the [geek-scifi-people] of [geek-scifi-alien]
+ [geek-scifi-event] of the [geek-scifi-alien] [geek-scifi-place]
+ [geek-scifi-event] of the [geek-scifi-place] of the [geek-scifi-people]
+ the [geek-scifi-thing] of the [geek-scifi-alien] [geek-scifi-place]
+ [geek-scifi-people] of the [geek-scifi-thing]
+ [geek-scifi-place] [geek-scifi-thing]
+ the [geek-scifi-enemy] [awaits]
+ [geek-scifi-thing] of the [geek-scifi-enemy]
+ [geek-scifi-event] of the [geek-scifi-enemy]
+ [geek-scifi-thing] [balance]
+ [geek-scifi-event] of the [geek-scifi-thing] of [geek-scifi-alien]
+ [geek-scifi-adj] [geek-scifi-place]
+ [geek-scifi-adj] [geek-scifi-place] of [geek-scifi-alien]
+ [geek-scifi-adj] [geek-scifi-alien] [geek-scifi-thing]
+ [last-name] [effect]
+
+pragma export-rule [geek-scifi-book]
+
+[awaits] awaits
+ comes
+ awakens
+ returns
+
+[balance] in the balance
+ on hold
+ in limbo
+ vanishes
+
+[effect] effect
+ equation
+
+[geek-scifi-place] planet
+ star
+ sun
+ universe
+ galaxy
+ solar system
+ world
+ realm
+ asteroid
+ comet
+ outpost
+ matrix
+ constellation
+ continuum
+ cluster
+ quasar
+ nebula
+
+[geek-scifi-thing] [techno+clysm]
+ federation
+ future
+ community
+ civilization
+ spaceship
+ union
+ alliance
+ foundation
+ conspiracy
+ amulet
+ black hole
+ anomaly
+ underground
+ empire
+
+[geek-scifi-enemy] menace
+ monster
+ machine
+ beast
+ devil
+
+[geek-scifi-people] explorer
+ pioneer
+ guardian
+ time traveler
+ astrophysicist
+ stonecutter
+ mystic
+ fortuneteller
+ philosopher
+ king
+ god
+ goddess
+ [dictator]
+ aristocrat
+ mathematician
+ scientist
+ wizard
+
+[geek-scifi-event] revenge
+ return
+ rise
+ fall
+ destruction
+ implosion
+ annihilation
+ victory
+ defeat
+ end
+
+[dictator] dictator
+ tyrant
+ despot
+ monarch
+
+[techno+clysm] [techno] clysm
+
+[techno] techno
+ cyber
+ lawyer
+ chrono
+
+[geek-scifi-adj] expanding
+ collapsing
+ imploding
+ derelict
+ abandoned
+ lost
+ triumphant
+ victorius
+ doomed
+ forbidden
+ unknown
+ null
+ infinite
+
+[geek-scifi-element] time travel
+ artificial intelligence
+ a sentient [animal]
+ galactic civilizations
+ faster-than-light travel
+ parallel universes
+ anti-gravity cars
+ mind-reading aliens
+ scientific techno-babble
+ teleportation
+
+[geek-scifi-alien] [random-name]
+ [geek-scifi-alien2]
+
+[geek-scifi-alien2] [planet]
+ orion
+ andromeda
+ gaia
+ alpha centauri
+ betelguese
+ alpha
+ beta
+ gamma
+ epsilon
+
+[geek-scifi-author] robert heinlein
+ neal stephenson
+ arthur c. clarke
+ isaac asimov
+ orson scott card
+
+[bogus-patent] server side includes
+ weblog-style sites
+ random poetry generators
+ [beige] computer cases
+ rectangular computer cases
+ dancing software assistants
+ command-line interfaces
+ floppy diskettes
+ hypertext documents
+ interpreted scripting languages
+ [num+click] shopping
+ rot13 encoding
+ xor encoding
+ the quadratic formula
+ cgi scripting
+ spell checking
+ pull-down menus
+ [dir] scroll bars
+
+[dir] horizontal
+ vertical
+
+[beige] beige
+ rectangular
+ translucent
+
+[num+click] [click-num] -click
+
+[click-num] double
+ zero
+ triple
+
+[pundit-flame] linux is communistic
+ linux will fail
+ linux is the worst operating system ever
+ could you get fired for choosing linux
+ unix is 1960s technology
+ the gpl is even more restrictive than a microsoft eula
+ the gnu project is holding back the open source movement
+ open source projects are uncreative and unoriginal
+ linux doesn't contain any innovations
+ microsoft is the most innovative company in the history of mankind
+ windows [windows-version] is much better than linux
+ iunix sucks
+ windows is the only gui with a consistent interface
+ why do end-users need source code anyways
+ linux users all behave like immature [linux-age] year olds
+ linux = linsux
+ linux is only free if your time is worthless
+ security through obscurity is the only way to go
+ attack of the snot-nosed linux zealots
+ linux advocacy: a dangerous brainwashing religious cult
+ microsoft will win
+
+pragma range-rule [linux-age] 7 16
+
+[peripheral] digital camera
+ [peripheral-interface] infrared video camera
+ [peripheral-interface] scanner
+ software modem
+ cable modem
+ video card
+ 3d accelerator card
+ [peripheral-interface] time travel card
+ [peripheral-interface] coffee machine
+ [monitor-size] inch monitor
+ uninterruptible power supply
+ [peripheral-interface] cd-recorder
+ beowulf-cluster-in-a-box
+
+[peripheral-interface] scsi
+ ide
+ parallel port
+ [usb]
+ firewire
+ serial port
+ thunderbolt
+
+[usb] usb
+ micro-usb
+ mini-usb
+ usb (type C)
+
+pragma export-rule [peripheral]
+
+[tech-hardware-company] ibm
+ dell
+ compaq
+ maxtor
+ seagate
+ western digital
+ transmeta
+ hewlett packard
+
+[opensource-project] linux
+ freebsd
+ netbsd
+ openbsd
+ apache
+ sendmail
+ gnome
+ kde
+ x11
+ mozilla
+
+[unix-tool] awk
+ sed
+ bison
+ gcc
+ vi
+ emacs
+
+[linux-event] linuxworld expo
+ atlanta linux showcase
+ linuxfest
+ linuxexpo
+
+[linux-usergroup] [linux+usergroup]
+
+[linux+usergroup] [letter] [letter] lug
+ [us-postal-state] lug
+ [letter] lug
+
+[freshmeat-url] [freshmeat+url]
+
+pragma export-rule [freshmeat-url]
+
+[freshmeat+url] http://freshmeat.net/news/ [digit] / [digit] / [digit] [digit] [digit] [digit] / [digit] [digit] [digit] [digit] [digit] [digit] [digit] [digit] [digit] /.html
+
+[freshmeat-desc] [app-type] [app-suffix]
+ [app-type] [app-suffix] for [freshmeat-for]
+ [app-type] [app-suffix] written in [computer-language]
+ [buzzword-adjective] [buzzword-noun] written in [computer-language]
+ [buzzword-adjective] [buzzword-noun] for the [career-tech]
+ [buzzword-adjective] [buzzword-noun] [buzzword-job]
+ [freshmeat-prefix] [app-type] [app-suffix]
+ [computer-language] [app-suffix]
+ [freshmeat-prefix] [buzzword-noun]
+ clone of [app-name-simple]
+ [freshmeat-prefix] implementation of microsoft [ms-product]
+
+pragma export-rule [freshmeat-desc]
+
+[freshmeat-prefix] open source
+ free
+ libre
+ updated
+ revamped
+ upgraded
+ shareware
+ freeware
+ public domain
+
+[freshmeat-for] linux
+ [linux-distro]
+ unix
+ freebsd
+ beos
+ bsd unix
+ perl/tk
+ tcl/tk
+ kde
+ gnome
+ qt
+ gtk
+ x11
+
+[freshmeat-app] [app-name] [app-version]
+
+[app-name] [app-name-simple]
+ [app-name-simple]
+ [app-name-simple]
+ [app-name-complex]
+
+pragma export-rule [app-name]
+
+[app-name-simple] [app-name+simple]
+
+[app-name+simple] [acronym]
+ [acronym]
+ [acronym]
+ [app-prefix] [acronym]
+ [app-prefix] [syllable] [letter]
+ [app-prefix] [syllable] 2 [syllable]
+ [acronym]
+ [letter] [acronym]
+ [random-name]
+ [last-name]
+ [syllable] [syllable]
+ [letter] [syllable]
+ [letter] [letter] [letter]
+ [letter] [letter] [letter] [letter]
+ [letter] [letter] [letter] [letter]
+ [letter] [letter] [letter] [letter]
+ [letter] [letter] [letter] [number-word]
+ [app-prefix] [acronym]
+ [app-prefix] [random-name]
+ [app-prefix] [letter] [letter] [letter] [letter]
+ [app-common]
+
+[app-name-complex] [plural+first] [app-type] [app-suffix]
+ [plural-first] [app-suffix]
+ [acronym] [app-type]
+ [acronym] [app-type] [app-suffix]
+ [app-type] [app-suffix]
+ [2+syllable] [app-type] [app-suffix]
+ [random-name] [app-suffix]
+ [app-prefix+letter] [app-suffix]
+ [app-prefix+syllable] [app-type] [app-suffix]
+ [app-common] [app-type] [app-suffix]
+ [tech-company] [peripheral] [device-type]
+ [buzzword-adjective] [app-suffix]
+ [plural+first] [buzzword-adjective] [buzzword-noun] [buzzword-job
+ [acronym] [buzzword-noun]
+ [app-prefix+name] [buzzword-adjective] [buzzword-job] [app-suffix]
+ [random-name] [buzzword-job]
+ [buzzword-adjective] [buzzword-noun] [app-suffix]
+ [linux-distro]
+
+[app-prefix+name] [app-prefix] [random-name]
+
+[app-prefix+letter] [app-prefix] [letter] [letter] [letter] [letter]
+
+[app-prefix+syllable] [app-prefix] [syllable] [syllable]
+
+[2+syllable] [syllable] [syllable]
+
+[plural+first] [first-name] 's
+
+[app-prefix] gnu/
+ gnu
+ gnu
+ gtk-
+ gtk
+ kde
+ x
+ k
+ x11
+ perl
+ java
+ php_
+ php
+ py
+ gpl
+ linux
+ linux
+ my
+ qt
+ qt_
+ lib
+ lib
+ mod
+ mod_
+ wx
+ cgi
+ web
+ net
+ html
+ phat
+ cool
+ wm
+ free
+ news
+ bsd
+
+[app-suffix] viewer
+ browser
+ client
+ server
+ proxy
+ agent
+ editor
+ database
+ object
+ programming language
+ shell
+ hack
+ window manager
+ user interface
+ front-end
+ back-end
+ interface
+ module
+ library
+ parser
+ generator
+ compiler
+ linker
+ plug-in
+ applet
+ project
+ office
+ enviroment
+ processor
+ parser
+ tools
+ toolkit
+ electron waster
+ simulator
+ clone
+ filesystem
+ device manager
+ thingamajig
+
+[app-type] web
+ internet
+ object-oriented
+ buzzword-enhanced
+ tcp/ip
+ html
+ http
+ xml
+ graphics
+ ascii
+ unicode
+ threaded
+ cool
+ cgi
+ scripting
+ online
+ c
+ perl
+ java
+ python
+ modern
+ postmodern
+ new and improved
+
+[app-common] [app+common]
+
+[app+common] [letter] spell
+ [letter] mail
+ [letter] edit
+ [last-name] fs
+ [random-name] lib
+ [letter] find
+ [random-name] x
+ [letter] grep
+ [letter] tools
+
+[app-version] [app+version]
+
+[app+version] 0.0. [1-20] [version-suffix]
+ 0. [digit-nozero] . [0-30]
+ 1.0. [0-30]
+ 1. [digit-nozero] . [0-30] [version-suffix]
+ 2. [digit] . [0-30]
+ 2. [digit] . [0-30] [version-suffix]
+ [3-9] . [digit] . [0-30]
+ 0.0 [digit] [version-suffix]
+ 0. [digit]
+ 0. [1-99]
+ 1.0 [version-suffix]
+ 1.00
+ 1. [1-99]
+ 1. [1-99] [version-suffix]
+ [2-20] . [1-99] [version-suffix]
+
+[version-suffix] pl [digit]
+ alpha
+ beta
+ - [1-30]
+ [letter]
+ -ac [digit]
+ -pre [digit]
+
+[linux-kernel-version] [linux-kernel+version]
+
+[linux-kernel+version] 2.2. [30-40]
+ 2.3. [50-99]
+ 2.4.0-pre [1-30]
+ 2.4.0-ac [1-30]
+ 2.4. [digit]
+ 2.5. [0-99]
+
+pragma range-rule [50-99] 50 99
+pragma range-rule [30-40] 30 40
+pragma range-rule [1-30] 1 30
+pragma range-rule [2-20] 2 20
+pragma range-rule [1-99] 1 99
+pragma range-rule [3-9] 3 9
+pragma range-rule [1-20] 1 20
+pragma range-rule [0-99] 0 99
+pragma range-rule [0-30] 0 30
+
+[windows-version] 95
+ 98
+ 98 second edition
+ millenium edition
+ nt 4.0
+ 2000
+ ce
+ xp
+ xp service pack 2
+ vista
+ 7
+ 8
+ 10
+ 10 anniversary edition
+
+[microsoft-product] office
+ word
+ excel
+ access
+ powerpoint
+ bob
+ visual basic
+ visual c++
+ iis
+ frontpage
+
+[software-product] coreldraw
+ wordperfect
+ microsoft office
+ microsoft word
+ borland delphi
+ oracle
+ interbase
+ autocad
+
+[microsoft-slogan] making it all make cents
+ over [5-20] years of innovation
+ wintel inside
+ your windows and gates to the world
+ fighting the department of injustice since day one
+ because anti-trust laws are obsolete
+ real people use our software, not nerds and geeks
+ crashes are normal
+ embracing and extending for over [20-30] years
+ this motto is not anti-competitive
+ got windows? you have to!
+ one microsoft way. it's much more than an address
+
+[opensource-license] gnu general public license
+ gnu lesser general public license
+ bsd licences
+ artistic license
+ mozilla public license
+ x11 license
+ apache license
+
+[rfc-document] [over+ip]
+ ip datagrams carried by [carrier]
+ PORN over real-time networks
+
+[over+ip] [ip-stuff] -over-ip
+
+[ip-stuff] electricity
+ water
+ pizza
+ beer
+
+pragma range-rule [5-20] 5 20
diff --git a/RGens/data/sample-grammars/long-data/animal.long b/RGens/data/sample-grammars/long-data/animal.long
new file mode 100644
index 0000000..b180551
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/animal.long
@@ -0,0 +1,15 @@
+dog
+cat
+horse
+cow
+chicken
+penguin
+turkey
+eagle
+llama
+camel
+deer
+bear
+elk
+giraffe
+elephant
diff --git a/RGens/data/sample-grammars/long-data/binary-digit.long b/RGens/data/sample-grammars/long-data/binary-digit.long
new file mode 100644
index 0000000..0d66ea1
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/binary-digit.long
@@ -0,0 +1,2 @@
+0
+1
diff --git a/RGens/data/sample-grammars/long-data/canada-province.long b/RGens/data/sample-grammars/long-data/canada-province.long
new file mode 100644
index 0000000..2ebadee
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/canada-province.long
@@ -0,0 +1,14 @@
+alberta
+british columbia
+manitoba
+new brunswick
+newfoundland
+labrador
+northwest territories
+nova scotia
+nunavut
+ontario
+prince edward island
+quebec
+saskatchewan
+yukon
diff --git a/RGens/data/sample-grammars/long-data/character.long b/RGens/data/sample-grammars/long-data/character.long
new file mode 100644
index 0000000..64a265a
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/character.long
@@ -0,0 +1,38 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+-
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+.
diff --git a/RGens/data/sample-grammars/long-data/color.long b/RGens/data/sample-grammars/long-data/color.long
new file mode 100644
index 0000000..dd60cb6
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/color.long
@@ -0,0 +1,10 @@
+red
+orange
+yellow
+green
+blue
+purple
+white
+black
+brown
+grey
diff --git a/RGens/data/sample-grammars/long-data/consonant-group.long b/RGens/data/sample-grammars/long-data/consonant-group.long
new file mode 100644
index 0000000..d709b9a
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/consonant-group.long
@@ -0,0 +1,42 @@
+b
+br
+c
+cl
+ch
+cr
+d
+dr
+f
+fl
+fr
+g
+gl
+gr
+h
+l
+m
+n
+p
+pl
+ph
+pr
+s
+st
+sl
+str
+sm
+sw
+sp
+sh
+sc
+sch
+sn
+t
+th
+tr
+v
+w
+wr
+x
+y
+z
diff --git a/RGens/data/sample-grammars/long-data/consonant.long b/RGens/data/sample-grammars/long-data/consonant.long
new file mode 100644
index 0000000..17cf67e
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/consonant.long
@@ -0,0 +1,21 @@
+b
+c
+d
+f
+g
+h
+j
+k
+l
+m
+n
+p
+q
+r
+s
+t
+v
+w
+x
+y
+z
diff --git a/RGens/data/sample-grammars/long-data/digit-noone.long b/RGens/data/sample-grammars/long-data/digit-noone.long
new file mode 100644
index 0000000..0ab1783
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/digit-noone.long
@@ -0,0 +1,9 @@
+0
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/RGens/data/sample-grammars/long-data/digit-nozero.long b/RGens/data/sample-grammars/long-data/digit-nozero.long
new file mode 100644
index 0000000..0719398
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/digit-nozero.long
@@ -0,0 +1,9 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/RGens/data/sample-grammars/long-data/digit.long b/RGens/data/sample-grammars/long-data/digit.long
new file mode 100644
index 0000000..8b1acc1
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/digit.long
@@ -0,0 +1,10 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/RGens/data/sample-grammars/long-data/first-name-female.long b/RGens/data/sample-grammars/long-data/first-name-female.long
new file mode 100644
index 0000000..69a5d9a
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/first-name-female.long
@@ -0,0 +1,532 @@
+abigail
+ada
+adrienne
+agnes
+alberta
+alexandra
+alexis
+alice
+alicia
+alison
+allison
+alma
+alyssa
+amanda
+amber
+amelia
+amy
+ana
+andre
+andrea
+angel
+angela
+angelica
+angelina
+angie
+anita
+ann
+anna
+anne
+annette
+annie
+antoinette
+antonia
+april
+ariane
+ariel
+arlene
+ashley
+audrey
+barbara
+beatrice
+becky
+belinda
+bernadette
+bernice
+bertha
+bessie
+beth
+bethany
+betsy
+betty
+beulah
+beverly
+billie
+blanca
+blanche
+bobbie
+bonnie
+brandi
+brandy
+brenda
+brianna
+bridget
+brittany
+brooke
+caitlin
+camille
+candace
+candice
+carla
+carmen
+carol
+carole
+caroline
+carolyn
+carrie
+casey
+cassandra
+catherine
+cathy
+cecelia
+cecilia
+celia
+charlene
+charlotte
+chelsea
+cheryl
+chloe
+christian
+christie
+christina
+christine
+christy
+cindy
+claire
+clara
+claudia
+colleen
+connie
+constance
+cora
+courtney
+cristina
+crystal
+cynthia
+daisy
+dana
+danielle
+darla
+darlene
+dawn
+deanna
+debbie
+deborah
+debra
+delia
+della
+delores
+denise
+desiree
+diana
+diane
+dianna
+dianne
+dion
+dixie
+dolores
+dominique
+donna
+dora
+doreen
+doris
+dorothy
+ebony
+edith
+edna
+eileen
+elaine
+eleanor
+elena
+elisa
+elizabeth
+ella
+ellen
+eloise
+elsa
+elsie
+elvira
+emily
+emma
+erica
+erika
+erin
+erma
+ernestine
+essie
+estelle
+esther
+ethel
+eula
+eunice
+eva
+evelyn
+faith
+fannie
+faye
+felicia
+felicity
+flora
+florence
+frances
+francis
+freda
+gabriel
+gabrielle
+gail
+gayle
+geneva
+genevieve
+georgia
+geraldine
+gertrude
+gina
+ginger
+gladys
+glenda
+gloria
+grace
+gretchen
+guadalupe
+gwen
+gwendolyn
+haley
+hannah
+harriet
+hattie
+hazel
+heather
+heidi
+helen
+henrietta
+hilda
+hillary
+holly
+hope
+ida
+inez
+irene
+iris
+irma
+isabel
+isabella
+jackie
+jacqueline
+jacquelyn
+jade
+jaime
+jamie
+jan
+jana
+jane
+janet
+janice
+janie
+janis
+jasmine
+jean
+jeanette
+jeanne
+jeannette
+jeannie
+jenna
+jennie
+jennifer
+jenny
+jessica
+jessie
+jill
+jo
+joan
+joann
+joanna
+joanne
+jodi
+jody
+johanna
+johnnie
+josefina
+josephine
+joy
+joyce
+juana
+juanita
+judith
+judy
+julia
+julie
+june
+kaitlyn
+kara
+karen
+kari
+karla
+kate
+katelyn
+katherine
+kathleen
+kathryn
+kathy
+katie
+katrina
+kay
+kayla
+kelley
+kelli
+kellie
+kelly
+kelsey
+kendra
+kerry
+kim
+kimberly
+krista
+kristen
+kristi
+kristie
+kristin
+kristina
+kristine
+kristy
+krystal
+lana
+latoya
+laura
+lauren
+laurie
+laverne
+leah
+lee
+leigh
+lela
+lena
+leona
+leslie
+leticia
+lila
+lillian
+lillie
+linda
+lindsay
+lindsey
+lisa
+lois
+lola
+lora
+lorena
+lorene
+loretta
+lori
+lorraine
+louise
+lucia
+lucille
+lucy
+lula
+luz
+lydia
+lynda
+lynette
+lynn
+lynne
+mabel
+mable
+mackenzie
+madeline
+madison
+mae
+magdalena
+maggie
+mamie
+mandy
+marcella
+marcia
+margaret
+margarita
+marge
+margie
+marguerite
+maria
+mariah
+marian
+marianne
+marie
+marilyn
+marion
+marjorie
+marlene
+marsha
+marta
+martha
+mary
+maryann
+mattie
+maureen
+maxine
+may
+megan
+meghan
+melanie
+melba
+melinda
+melissa
+melody
+mercedes
+meredith
+michele
+michelle
+mildred
+mindy
+minnie
+miranda
+miriam
+misty
+molly
+mona
+monica
+monique
+morgan
+muriel
+myra
+myrtle
+nadine
+nancy
+naomi
+natalie
+natasha
+nellie
+nettie
+nichole
+nicole
+nina
+nora
+norma
+olga
+olive
+olivia
+ollie
+opal
+ora
+paige
+pam
+pamela
+pat
+patricia
+patsy
+patti
+patty
+paula
+paulette
+pauline
+pearl
+peggy
+penny
+phyllis
+priscilla
+rachael
+rachel
+ramona
+raquel
+raven
+rebecca
+regina
+renee
+rhonda
+rita
+roberta
+robin
+robyn
+rochelle
+rosa
+rosalie
+rose
+rosemarie
+rosemary
+rosie
+roxanne
+ruby
+ruth
+sabrina
+sadie
+sally
+samantha
+sandra
+sandy
+sara
+sarah
+shannon
+shari
+sharon
+shawna
+sheila
+shelia
+shelley
+shelly
+sheri
+sherri
+sherry
+sheryl
+shirley
+silvia
+sonia
+sonja
+sonya
+sophia
+sophie
+stacey
+stacy
+stella
+stephanie
+sue
+susan
+susie
+suzanne
+sydney
+sylvia
+tabitha
+tamara
+tami
+tammy
+tanya
+tara
+tasha
+taylor
+teresa
+teri
+terri
+terry
+thelma
+theresa
+tiffany
+tina
+toni
+tonya
+tracey
+traci
+tracy
+tricia
+valerie
+vanessa
+velma
+vera
+verna
+veronica
+vicki
+vickie
+vicky
+victoria
+viola
+violet
+virginia
+vivian
+wanda
+wendy
+whitney
+willie
+wilma
+winifred
+yasmine
+yolanda
+yvette
+yvonne
+zoe
diff --git a/RGens/data/sample-grammars/long-data/first-name-male.long b/RGens/data/sample-grammars/long-data/first-name-male.long
new file mode 100644
index 0000000..1e7d7e9
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/first-name-male.long
@@ -0,0 +1,624 @@
+aaron
+abel
+abraham
+adam
+adolph
+adrian
+al
+alan
+albert
+alberto
+alejandro
+alex
+alexander
+alfonso
+alfred
+alfredo
+allan
+allen
+alonzo
+alton
+alvin
+amos
+andre
+andreas
+andres
+andrew
+andy
+angel
+angelo
+angus
+anthony
+antoine
+anton
+antonio
+archie
+armando
+arnold
+art
+arthur
+arturo
+aubrey
+aubrie
+austin
+barry
+bart
+bayard
+ben
+benjamin
+bennie
+benny
+benoit
+bernard
+bernhard
+bert
+bill
+billy
+blake
+bob
+bobby
+boris
+boyd
+brad
+bradford
+bradley
+brandon
+brendan
+brent
+brett
+brian
+bruce
+bruno
+bryan
+bryant
+bryce
+byron
+caleb
+calvin
+cameron
+carl
+carlos
+carlton
+carroll
+cary
+casey
+cecil
+cecilie
+cedric
+cesar
+chad
+charles
+charlie
+chester
+chris
+christian
+christopher
+clarence
+clark
+claude
+clay
+clayton
+cliff
+clifford
+clifton
+clint
+clinton
+clyde
+cody
+cole
+colin
+connor
+conrad
+corey
+cornelius
+cory
+courtney
+craig
+crispin
+curtis
+dale
+dallas
+damon
+dan
+dana
+daniel
+danny
+darin
+darnell
+darrel
+darrell
+darren
+darrin
+darryl
+daryl
+dave
+david
+dean
+delbert
+dennis
+derek
+derrick
+deven
+devin
+dewey
+dexter
+dick
+diego
+dieter
+dimitri
+dimitrius
+domingo
+dominic
+dominick
+dominique
+don
+donald
+donnie
+doug
+douglas
+doyle
+drazen
+drew
+duane
+dustin
+dwayne
+dwight
+dylan
+earl
+earnest
+ed
+eddie
+edgar
+edmond
+edmund
+eduardo
+edward
+edwin
+elbert
+elias
+elijah
+ellis
+elmer
+emanuel
+emilio
+emmett
+enrico
+enrique
+eric
+erick
+erik
+ernest
+ernesto
+ervin
+ethan
+eugene
+evan
+everett
+felipe
+felix
+fernando
+floyd
+forrest
+fox
+francis
+francisco
+frank
+frankie
+franklin
+franky
+fred
+freddie
+freddy
+frederic
+frederick
+fredrick
+fredrik
+gabe
+gabriel
+garrett
+garry
+garth
+gary
+gavin
+gene
+geoff
+geoffrey
+george
+gerald
+gerard
+gerardo
+gilbert
+gilberto
+glen
+glenn
+gordon
+grady
+graham
+grant
+greg
+gregg
+gregor
+gregory
+guadalupe
+guillermo
+gunnar
+gustavo
+guy
+hans
+harold
+harry
+harvey
+hector
+henrik
+henry
+herald
+herb
+herbert
+herman
+homer
+horace
+howard
+hubert
+hugh
+hugo
+hunter
+iain
+ian
+ignacio
+igor
+ira
+irvin
+irving
+isaac
+ismael
+israel
+ivan
+jack
+jackie
+jacob
+jacques
+jaime
+jake
+james
+jamie
+jan
+jared
+jarret
+jason
+javier
+jay
+jean
+jeff
+jeffery
+jeffrey
+jerald
+jeremiah
+jeremy
+jermaine
+jeroen
+jerome
+jerry
+jesse
+jessie
+jesus
+jim
+jimmie
+jimmy
+jody
+joe
+joel
+joey
+johan
+john
+johnathan
+johnnie
+johnny
+jon
+jonathan
+jonathon
+jordan
+jorge
+jose
+joseph
+josh
+joshua
+juan
+julian
+julio
+julius
+justin
+karl
+karlo
+kasper
+keith
+kelly
+kelvin
+ken
+kenneth
+kenny
+kent
+kerry
+kevin
+kim
+kirk
+klaus
+kris
+kristian
+kristopher
+kurt
+kyle
+lamar
+lance
+larry
+lars
+lauren
+laurence
+laurie
+lawrence
+lee
+leland
+lenny
+leo
+leon
+leonard
+leonardo
+leroy
+leslie
+lester
+levi
+lewis
+lex
+liam
+lindsay
+linus
+lionel
+lloyd
+logan
+lonnie
+loren
+lorenzo
+louis
+lowell
+lucas
+luigi
+luis
+luke
+luther
+lyle
+lynn
+mack
+magnus
+malcolm
+manuel
+marc
+marcelo
+marco
+marcos
+marcus
+marek
+mario
+marion
+mark
+marlon
+marshall
+martin
+marty
+marvin
+mathew
+matt
+matthew
+matthias
+maurice
+max
+may
+mel
+melvin
+merle
+michael
+micheal
+miguel
+mike
+miles
+milton
+mitch
+mitchell
+morris
+morten
+moses
+muhammed
+myron
+nathan
+nathaniel
+neal
+ned
+neil
+nelson
+neville
+nic
+nicholas
+nick
+nicola
+nicolas
+niels
+nigel
+nils
+noah
+noel
+norbert
+norm
+norman
+oliver
+omar
+orion
+orlando
+orville
+oscar
+otis
+owen
+pablo
+pat
+patrick
+paul
+paulo
+pedro
+percy
+perry
+pete
+peter
+phil
+philip
+philippe
+phillip
+pierre
+preston
+rafael
+ralph
+ramiro
+ramon
+randal
+randall
+randolph
+randy
+rasmus
+raul
+ray
+raymond
+reginald
+reinhard
+rene
+rex
+rhys
+ricardo
+richard
+rick
+rickey
+ricky
+rob
+robbie
+robert
+roberto
+robin
+rod
+roderick
+rodney
+rodolfo
+rodrigo
+roel
+roelof
+rogelio
+roger
+roland
+rolando
+rolf
+roman
+ron
+ronald
+ronnie
+roosevelt
+rory
+ross
+roy
+ruben
+rudolph
+rudy
+rufus
+russ
+russell
+ryan
+salvador
+salvatore
+sam
+sammy
+samuel
+sander
+santiago
+santos
+saul
+scott
+sean
+sergei
+sergio
+seth
+shane
+shannon
+shaun
+shawn
+sheldon
+sherman
+sid
+sidney
+simon
+skip
+slobodan
+sonny
+spencer
+stan
+stanley
+stefan
+stein
+stephan
+stephano
+stephen
+steve
+steven
+stewart
+stuart
+sulaiman
+sunny
+susie
+sven
+sylvester
+taylor
+ted
+terence
+terrance
+terrell
+terrence
+terry
+thad
+theodore
+thomas
+tim
+timmy
+timothy
+toby
+todd
+tom
+tomas
+tommie
+tommy
+tony
+tracy
+travis
+trevor
+trey
+tristan
+troy
+tyler
+tyrone
+vernon
+victor
+vince
+vincent
+virgil
+wade
+wallace
+walter
+warren
+wayne
+wendell
+wesley
+wilbert
+wilbur
+wilfred
+will
+willard
+william
+willie
+willis
+wilson
+winston
+woodrow
+xavier
+yuri
+zachary
diff --git a/RGens/data/sample-grammars/long-data/hex-digit.long b/RGens/data/sample-grammars/long-data/hex-digit.long
new file mode 100644
index 0000000..9d0fa5e
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/hex-digit.long
@@ -0,0 +1,16 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+a
+b
+c
+d
+e
+f
diff --git a/RGens/data/sample-grammars/lastname.long b/RGens/data/sample-grammars/long-data/last-name.long
index 4dc6721..4dc6721 100644
--- a/RGens/data/sample-grammars/lastname.long
+++ b/RGens/data/sample-grammars/long-data/last-name.long
diff --git a/RGens/data/sample-grammars/long-data/last-syllable.long b/RGens/data/sample-grammars/long-data/last-syllable.long
new file mode 100644
index 0000000..ed08a6e
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/last-syllable.long
@@ -0,0 +1,9 @@
+on
+ly
+er
+son
+row
+way
+s
+ton
+dale
diff --git a/RGens/data/sample-grammars/long-data/letter.long b/RGens/data/sample-grammars/long-data/letter.long
new file mode 100644
index 0000000..0edb856
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/letter.long
@@ -0,0 +1,26 @@
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
diff --git a/RGens/data/sample-grammars/long-data/middle-initial.long b/RGens/data/sample-grammars/long-data/middle-initial.long
new file mode 100644
index 0000000..ed3bb3d
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/middle-initial.long
@@ -0,0 +1,18 @@
+a
+b
+c
+d
+e
+f
+g
+h
+j
+k
+l
+m
+n
+o
+p
+r
+s
+t
diff --git a/RGens/data/sample-grammars/long-data/nation.long b/RGens/data/sample-grammars/long-data/nation.long
new file mode 100644
index 0000000..9f1b503
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/nation.long
@@ -0,0 +1,218 @@
+afghanistan
+albania
+algeria
+american samoa
+andorra
+angola
+anguilla
+antarctica
+antigua
+argentina
+armenia
+aruba
+australia
+austria
+azerbaijan
+bahamas
+bahrain
+bangladesh
+barbados
+belarus
+belgium
+belize
+benin
+bermuda
+bhutan
+bolivia
+bosnia and herzegovina
+botswana
+brazil
+brunei
+bulgaria
+burkina faso
+burma
+burundi
+cambodia
+cameroon
+canada
+cape verde
+central african republic
+chad
+chile
+china
+colombia
+comoros
+congo
+cook islands
+costa rica
+cote d'ivoire
+croatia
+cuba
+cyprus
+czech republic
+denmark
+djibouti
+dominica
+dominican republic
+ecuador
+egypt
+el salvador
+equatorial guinea
+eritrea
+estonia
+ethiopia
+falkland islands
+fiji
+finland
+france
+french guiana
+french polynesia
+gabon
+the gambia
+georgia
+germany
+ghana
+gibraltar
+greece
+greenland
+grenada
+guadeloupe
+guam
+guatemala
+guinea
+guinea-bissau
+guyana
+haiti
+the holy see
+honduras
+hong kong
+hungary
+iceland
+india
+indonesia
+iran
+iraq
+ireland
+israel
+italy
+jamaica
+japan
+jordan
+kazakhstan
+kenya
+kiribati
+kuwait
+kyrgyzstan
+laos
+latvia
+lebanon
+lesotho
+liberia
+libya
+liechtenstein
+lithuania
+luxembourg
+macau
+macedonia
+madagascar
+malawi
+malaysia
+maldives
+mali
+malta
+marshall islands
+martinique
+mauritania
+mauritius
+mayotte
+mexico
+federated states of micronesia
+moldova
+monaco
+mongolia
+montserrat
+morocco
+mozambique
+namibia
+nauru
+nepal
+netherlands
+netherlands antilles
+new caledonia
+new zealand
+nicaragua
+niger
+nigeria
+north korea
+northern mariana islands
+norway
+oman
+pakistan
+palau
+panama
+papua new guinea
+paraguay
+peru
+philippines
+pitcairn islands
+poland
+portugal
+puerto rico
+qatar
+reunion
+romania
+russia
+rwanda
+saint kitts and nevis
+saint lucia
+saint pierre and miquelon
+saint vincent and the grenadines
+samoa
+san marino
+sao tome and principe
+saudi arabia
+senegal
+seychelles
+sierra leone
+singapore
+slovakia
+slovenia
+solomon islands
+somalia
+south africa
+south korea
+spain
+sri lanka
+sudan
+suriname
+swaziland
+sweden
+switzerland
+syria
+taiwan
+tajikistan
+tanzania
+thailand
+togo
+tonga
+trinidad and tobago
+tunisia
+turkey
+turkmenistan
+turks and caicos islands
+tuvalu
+uganda
+ukraine
+united arab emirates
+united kingdom
+united states
+uruguay
+uzbekistan
+vanuatu
+venezuela
+vietnam
+western sahara
+yemen
+zaire
+zambia
+zimbabwe
diff --git a/RGens/data/sample-grammars/long-data/natural-color.long b/RGens/data/sample-grammars/long-data/natural-color.long
new file mode 100644
index 0000000..8830962
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/natural-color.long
@@ -0,0 +1,6 @@
+red
+black
+blue
+green
+white
+yellow
diff --git a/RGens/data/sample-grammars/long-data/number-word.long b/RGens/data/sample-grammars/long-data/number-word.long
new file mode 100644
index 0000000..c9e9e05
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/number-word.long
@@ -0,0 +1,10 @@
+one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+ten
diff --git a/RGens/data/sample-grammars/long-data/ordinal.long b/RGens/data/sample-grammars/long-data/ordinal.long
new file mode 100644
index 0000000..bfbf47b
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/ordinal.long
@@ -0,0 +1,12 @@
+first
+second
+third
+fourth
+fifth
+sixth
+seventh
+eighth
+ninth
+tenth
+eleventh
+twelfth
diff --git a/RGens/data/sample-grammars/long-data/planet.long b/RGens/data/sample-grammars/long-data/planet.long
new file mode 100644
index 0000000..0b28274
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/planet.long
@@ -0,0 +1,8 @@
+mercury
+venus
+mars
+jupiter
+saturn
+uranus
+neptune
+pluto
diff --git a/RGens/data/sample-grammars/long-data/real-city.long b/RGens/data/sample-grammars/long-data/real-city.long
new file mode 100644
index 0000000..0f787ce
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/real-city.long
@@ -0,0 +1,76 @@
+birmingham
+anchorage
+mesa
+phoenix
+tucson
+anaheim
+fresno
+long beach
+los angeles
+oakland
+riverside
+sacramento
+san diego
+san francisco
+san jose
+santa ana
+stockton
+aurora
+colorado springs
+denver
+washington
+jacksonville
+miami
+st. petersburg
+tampa
+atlanta
+honolulu
+chicago
+indianapolis
+wichita
+lexington
+louisville
+baton rouge
+new orleans
+baltimore
+boston
+detroit
+minneapolis
+st. paul
+kansas city
+st. louis
+omaha
+las vegas
+jersey city
+newark
+albuquerque
+buffalo
+new york
+rochester
+charlotte
+raleigh
+akron
+cincinnati
+cleveland
+columbus
+toledo
+oklahoma city
+tulsa
+portland
+philadelphia
+pittsburgh
+memphis
+nashville
+arlington
+austin
+corpus christi
+dallas
+el paso
+fort worth
+houston
+san antonio
+norfolk
+richmond
+virginia beach
+seattle
+milwaukee
diff --git a/RGens/data/sample-grammars/long-data/real-company.long b/RGens/data/sample-grammars/long-data/real-company.long
new file mode 100644
index 0000000..f32f028
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/real-company.long
@@ -0,0 +1,207 @@
+3com
+aflac
+at&t
+ace hardware
+aetna
+aid association for lutherans
+albertson's
+allstate
+alltel
+amerenue
+america online
+american express
+american general
+ames department stores
+anheuser-busch
+apple computer
+archer daniels midland
+autozone
+avis rent a car
+avon products
+b.f. goodrich
+bank of america corp.
+barnes & noble
+bell atlantic
+bellsouth
+berkshire hathaway
+best buy
+black & decker
+boeing
+bristol-myers squibb
+burlington northern santa fe
+cbs
+cvs
+cablevision systems
+campbell soup
+caterpillar
+cendant
+charles schwab
+chase manhattan corp.
+chevron
+cigna
+cinergy
+circuit city group
+cisco systems
+citigroup
+clorox
+coastal
+coca-cola
+colgate-palmolive
+columbia/hca healthcare
+comcast
+comerica
+compusa
+compaq computer
+computer associates intl.
+conagra
+conoco
+conseco
+continental airlines
+corning
+costco wholesale
+dana
+dell computer
+delta air lines
+dillard's
+dole food
+dollar general
+dow chemical
+eastman kodak
+eli lilly
+este lauder
+exxon mobil
+fannie mae
+farmland industries
+fedex
+firstar corp.
+fleetwood enterprises
+ford motor
+gte
+gannett
+gap
+gateway
+general electric
+general mills
+general motors
+gillette
+goldman sachs group
+goodyear tire & rubber
+h.j. heinz
+hartford financial services
+hasbro
+healthsouth
+hershey foods
+hewlett-packard
+home depot
+honeywell international
+hormel foods
+itt industries
+ikon office solutions
+ingersoll-rand
+intel
+ibm
+j.c. penney
+j.p. morgan & co.
+john hancock financial services
+johnson & johnson
+kellogg
+kimberly-clark
+kmart
+knight-ridder
+kroger
+lexmark international
+lockheed martin
+lowe's
+lucent technologies
+mci worldcom
+marriott international
+mattel
+maytag
+mcdonald's
+mcgraw-hill
+merck
+merrill lynch
+metropolitan life insurance
+micron technology
+microsoft
+monsanto
+morgan stanley dean witter
+motorola
+mutual of omaha insurance
+ncr
+nabisco group holdings
+new york life insurance
+new york times
+newell rubbermaid
+nextel communications
+nike
+nordstrom
+northwest airlines
+office depot
+officemax
+oracle
+owens corning
+paine webber group
+pepsico
+pfizer
+pharmacia & upjohn
+philip morris
+procter & gamble
+providian financial
+prudential ins. co. of america
+quaker oats
+qualcomm
+quantum
+qwest communications
+r. j. reynolds tobacco
+ralston purina
+raytheon
+rockwell international
+sbc communications
+safeway
+saks
+sara lee
+seagate technology
+sears roebuck
+servicemaster
+sherwin-williams
+shopko stores
+sodexho marriott services
+southwest airlines
+sprint
+staples
+state farm insurance cos.
+sun microsystems
+suntrust banks
+sunoco
+supervalu
+tandy
+target
+tenet healthcare
+texaco
+texas instruments
+time warner
+times mirror
+toys `r' us
+trans world airlines
+tyson foods
+u.s. bancorp
+us airways group
+us west
+ultramar diamond shamrock
+union carbide
+union pacific
+unisys
+united parcel service
+unitedhealth group
+universal
+viacom
+wal-mart stores
+walgreen
+walt disney
+warner-lambert
+wells fargo
+weyerhaeuser
+whirlpool
+winn-dixie stores
+xerox
diff --git a/RGens/data/sample-grammars/long-data/relative.long b/RGens/data/sample-grammars/long-data/relative.long
new file mode 100644
index 0000000..74c9d7e
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/relative.long
@@ -0,0 +1,10 @@
+father
+mother
+uncle
+aunt
+grandmother
+grandfather
+sister
+brother
+cousin
+mother-in-law
diff --git a/RGens/data/sample-grammars/long-data/roman-numeral.long b/RGens/data/sample-grammars/long-data/roman-numeral.long
new file mode 100644
index 0000000..b21d14a
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/roman-numeral.long
@@ -0,0 +1,10 @@
+I
+II
+III
+IV
+V
+VI
+VII
+VIII
+IX
+X
diff --git a/RGens/data/sample-grammars/syllable.long b/RGens/data/sample-grammars/long-data/syllable.long
index ee27d49..ee27d49 100644
--- a/RGens/data/sample-grammars/syllable.long
+++ b/RGens/data/sample-grammars/long-data/syllable.long
diff --git a/RGens/data/sample-grammars/long-data/town-name.long b/RGens/data/sample-grammars/long-data/town-name.long
new file mode 100644
index 0000000..cb4285b
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/town-name.long
@@ -0,0 +1,141 @@
+sullivan
+jakin
+geneva
+coleharbor
+cadiz
+dawson
+turon
+salem
+pax
+dakota
+moorefield
+zenda
+mettawa
+orchard
+busby
+cloudcroft
+perla
+burlington
+morrison
+blackburn
+jerico
+skykomish
+dupree
+dawson
+bowers
+star
+dorrance
+roberts
+carbon
+hopedale
+croghan
+elgin
+holland
+berkley
+sherrill
+varna
+owen
+oxford
+drake
+notus
+hobgood
+thacker
+springfield
+fraser
+avon
+audubon
+waterloo
+windsor
+atoka
+cherry
+hudson
+kechi
+pickstown
+elizabeth
+holt
+stapleton
+kell
+gardena
+osceola
+moscow
+morrison
+mustang
+maxwell
+francis
+eureka
+darlington
+ely
+bancroft
+hanover
+milano
+cabery
+byars
+gully
+sherwood
+reklaw
+watkins
+heartwell
+dawson
+vermont
+goldville
+paxson
+potwin
+sherman
+glenbeulah
+sunset
+clearwater
+solen
+altamont
+dyer
+murray
+rathbun
+huntleigh
+poulan
+burlington
+jackson
+verndale
+cleveland
+josephine
+leland
+carrollton
+vance
+sumner
+tira
+mead
+gumbranch
+glenwood
+harrison
+hannibal
+carthage
+callao
+bussey
+coaldale
+chugwater
+andale
+adell
+farber
+carlton
+prue
+tenney
+walcott
+udall
+brighton
+minburn
+swan
+frazer
+menlo
+bassett
+massena
+trommald
+waynesfield
+lynd
+mendon
+hammond
+simsboro
+thornton
+crary
+reynolds
+turton
+perry
+penasco
+loami
diff --git a/RGens/data/sample-grammars/long-data/tree.long b/RGens/data/sample-grammars/long-data/tree.long
new file mode 100644
index 0000000..ecc8cbd
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/tree.long
@@ -0,0 +1,17 @@
+pine
+elm
+maple
+oak
+walnut
+ash
+sycamore
+gum
+hickory
+cedar
+willow
+cherry
+spruce
+chestnut
+birch
+dogwood
+poplar
diff --git a/RGens/data/sample-grammars/long-data/vowel-group.long b/RGens/data/sample-grammars/long-data/vowel-group.long
new file mode 100644
index 0000000..2acf570
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/vowel-group.long
@@ -0,0 +1,18 @@
+a
+ai
+au
+ar
+e
+ee
+eu
+er
+i
+ir
+io
+o
+or
+ou
+oa
+oo
+u
+ur
diff --git a/RGens/data/sample-grammars/long-data/vowel.long b/RGens/data/sample-grammars/long-data/vowel.long
new file mode 100644
index 0000000..513edf4
--- /dev/null
+++ b/RGens/data/sample-grammars/long-data/vowel.long
@@ -0,0 +1,5 @@
+a
+e
+i
+o
+u
diff --git a/RGens/data/sample-grammars/media.gram b/RGens/data/sample-grammars/media.gram
new file mode 100644
index 0000000..42eef6d
--- /dev/null
+++ b/RGens/data/sample-grammars/media.gram
@@ -0,0 +1,159 @@
+[media-company] [television-station]
+ [radio-station]
+ [newspaper]
+
+pragma initial-rule [media-company]
+pragma export-rule [television-station]
+pragma export-rule [radio-station]
+pragma export-rule [newspaper]
+
+[television-station] [chan+name] channel [med-chan-num]
+ [chan+name] channel [low-chan-num]
+
+pragma range-rule [med-chan-num] 2 45
+pragma range-rule [low-chan-num] 2 12
+
+[chan+name] k [chan-name2]
+ w [chan-name2]
+
+[chan-name2] [letter] [letter] [letter] -tv
+
+[radio-station] [radio+name] [radio+chan]
+
+[radio+name] k [radio+name2]
+ w [radio+name2]
+
+[radio+name2] [letter] [letter] [letter] [chan-type]
+
+[chan-type] -fm [[chantype=fm]]
+ -am [[chantype=am]]
+
+[radio+chan] 9 [radio-9chan]
+ [$chantype-1chan]
+
+[radio-9chan] [digit] . [digit]
+
+[fm-1chan] 1 [digit] [digit] . [digit]
+
+[am-1chan] 10 [digit] [digit]
+
+[newspaper] the [newspaper-pair1] - [newspaper-pair2]
+ the [newspaper-pair1] - [newspaper-pair2] - [newspaper-pair2]
+ the daily [newspaper-pair1] [newspaper-pair2]
+ the [newspaper-pair1] [newspaper-pair2]
+ [city] [newspaper-pair1] - [newspaper-pair2]
+ [city] [newspaper-pair1] [newspaper-pair2]
+ [city] [newspaper-pair2]
+ [city] [newspaper-pair1]
+ [real-city] [newspaper-pair1] - [newspaper-pair2]
+ [town-name] [newspaper-pair2]
+ the [cardinal] [us-stateadj]
+ [us-stateadj] [newspaper-pair1] - [newspaper-pair2]
+ [cardinal] [us-state] [newspaper-pair1] [newspaper-pair2]
+
+[newspaper-pair1] southern
+ northern
+ eastern
+ western
+ democratic
+ republic
+ liberty
+ freedom
+ sun
+ patriot
+ river
+ mountain
+ plains
+ american
+ news
+ post
+ morning
+ evening
+ star
+ daily
+ new
+ old
+ responsible
+ ethical
+ pulp
+ events
+ banner
+ standard
+ world
+ register
+
+[newspaper-pair2] daily
+ weekly
+ evening
+ republic
+ american
+ democrat
+ republican
+ leader
+ ledger
+ journal
+ bulletin
+ advertiser
+ dispatch
+ intelligencier
+ inquirer
+ post
+ times
+ review
+ star
+ justice
+ record
+ press
+ tribune
+ gazette
+ chronicle
+ herald
+ bugle
+ arrow
+ statesman
+ monitor
+ globe
+ planet
+ register
+
+pragma export-rule [newspaper-pair2]
+
+[cardinal] north
+ west
+ east
+ south
+ northeast
+ northwest
+ southeast
+ southwest
+
+pragma export-rule [cardinal]
+
+[real-newspaper] new york times
+ la times
+ chicago tribune
+ usa today
+ st. louis post-dispatch
+ washington post
+ houston chronicle
+ kansas city star
+ denver post
+ seattle times
+
+[tech-publication] wired news
+ infoworld
+ computerworld
+ pc week
+ windows magazine
+ salon.com
+ abcnews.com
+ the register
+
+[biz-publication] forbes
+ industry standard
+ business week
+ wall street journal
+ f@stcompany
+ motley fool
+ the economist
+ fortune
diff --git a/RGens/data/sample-grammars/mission.gram b/RGens/data/sample-grammars/mission.gram
index 7954657..627d2b4 100644
--- a/RGens/data/sample-grammars/mission.gram
+++ b/RGens/data/sample-grammars/mission.gram
@@ -28,8 +28,8 @@ pragma initial-rule [mission-statement]
[noun-part] our [adjective] [noun]
our [noun]
- our [[noun+noun-prefix]]
- [adjective] [[noun+noun-prefix]]
+ our [noun+noun-prefix]
+ [adjective] [noun+noun-prefix]
[adjective] [noun]
[noun]
diff --git a/RGens/data/sample-grammars/names.gram b/RGens/data/sample-grammars/names.gram
new file mode 100644
index 0000000..241159f
--- /dev/null
+++ b/RGens/data/sample-grammars/names.gram
@@ -0,0 +1,30 @@
+[full-name] [first-name] [last-name]
+ [first-name] [middle-initial] [last-name]
+ [consonant] [middle-initial] [last-name]
+ [random-name] [random-name]
+
+pragma initial-rule [full-name]
+pragma export-rule [person]
+pragma export-rule [first-name]
+pragma export-rule [full-name-and-title]
+pragma export-rule [random-name]
+
+[full-name-and-title] Mr. [first-name-male] [last-name]
+ Mr. [first-name-male] [middle-initial] [last-name]
+ Mrs. [first-name-female] [last-name]
+ Miss [first-name-female] [last-name]
+ Dr. [first-name] [last-name]
+
+[person] [first-name] [last-name]
+
+[first-name] [first-name-male]
+ [first-name-female]
+
+[random-name] [actual+random-name]
+
+[actual+random-name] [syllable] [syllable]
+ [syllable] [syllable] [last-syllable]
+ [syllable] [vowel] [consonant-group] [vowel]
+ [consonant-group] [vowel] [syllable]
+ [vowel] [syllable] [syllable]
+ [syllable] [vowel-group] [consonant]
diff --git a/RGens/data/sample-grammars/newspaper.gram b/RGens/data/sample-grammars/newspaper.gram
new file mode 100644
index 0000000..afa91ee
--- /dev/null
+++ b/RGens/data/sample-grammars/newspaper.gram
@@ -0,0 +1,4 @@
+[headline] [headline-prefix] [headline-news]
+ [headline-news] [headline-suffix]
+
+pragma initial-rule [headline]
diff --git a/RGens/data/sample-grammars/numbers.gram b/RGens/data/sample-grammars/numbers.gram
new file mode 100644
index 0000000..86be953
--- /dev/null
+++ b/RGens/data/sample-grammars/numbers.gram
@@ -0,0 +1,19 @@
+[small-number] [actual+small-number]
+
+[medium-number] [actual+medium-number]
+
+[zipcode] [actual+zipcode]
+
+pragma export-rule [small-number]
+pragma export-rule [medium-number]
+pragma export-rule [zipcode]
+
+[actual+small-number] [digit-nozero]
+ [digit-nozero] [digit]
+ [digit-nozero] [digit] [digit]
+
+[actual+medium-number] [digit-nozero] [digit] [digit]
+ [digit-nozero] [digit] [digit] [digit]
+ [digit-nozero] [digit] [digit] [digit] [digit]
+
+[actual+zipcode] [digit] [digit] [digit] [digit] [digit]
diff --git a/RGens/data/sample-grammars/ordinal.gram b/RGens/data/sample-grammars/ordinal.gram
new file mode 100644
index 0000000..5bf3696
--- /dev/null
+++ b/RGens/data/sample-grammars/ordinal.gram
@@ -0,0 +1,20 @@
+[ordinal-number] [actual+ordinal-number]
+
+pragma export-rule [ordinal-number]
+
+[actual+ordinal-number] [ordinal-digit]
+ 1 [digit] th
+ [digit-noone] [ordinal-digit]
+ [digit-noone] [ordinal-digit]
+ [digit-nozero] [ordinal-number]
+
+[ordinal-digit] 1st
+ 2nd
+ 3rd
+ 4th
+ 5th
+ 6th
+ 7th
+ 8th
+ 9th
+ 0th
diff --git a/RGens/data/sample-grammars/organization.gram b/RGens/data/sample-grammars/organization.gram
new file mode 100644
index 0000000..d185bc5
--- /dev/null
+++ b/RGens/data/sample-grammars/organization.gram
@@ -0,0 +1,186 @@
+[organization] [org-political]
+
+pragma initial-rule [organization]
+pragma export-rule [org-political]
+
+[org-political] [org-prefix] [org-body] [org-goal]
+
+pragma uniform
+
+[org-body] 7 of [org-members] [org-position]
+ 1 for
+
+pragma uniform
+
+[org-position] for
+ for
+ supporting
+ in support of
+ committed to
+ against
+ opposed to
+
+[org-goal] "nuke first, ask questions later" policy
+ banning negative campaign ads
+ big brother policies
+ book burnings
+ campaign finance reform
+ cutting taxes for the [wealth]
+ daylight saving time
+ draconian software license agreements
+ eliminating the national debt
+ eliminating violence on tv
+ gay marriages
+ genetically modified foods
+ god in the classroom
+ government handouts
+ gun control
+ hitting unfriendly nations with a nuclear bomb
+ increased military spending
+ increasing the minimum wage to [min+wage]
+ internet censorship
+ internet pornography
+ legal reform
+ local control of schools
+ marijuana legalization
+ nuclear winter
+ political correctness
+ prescription drug subsidies
+ privacy rights
+ pro-choice policy
+ pro-life policy
+ protecting the [protect]
+ raising taxes for [tax-class]
+ random drug testing for elected officials
+ right on red traffic laws
+ splitting microsoft into [ms-pieces] pieces
+ subsidized day care for working parents
+ teaching [subject] in the classroom
+ the death penalty
+ the designated hitter rule
+ the flat tax
+ universal health care
+ using [bad-thing] in public
+ wealth redistribution
+ wearing baseball caps backwards
+ [org-goal-abolish] miranda rights
+ [org-goal-abolish] speed limits
+ [org-goal-abolish] the [protect]
+ [org-goal-abolish] women's suffrage
+
+[wealth] poor
+ working poor
+ middle class
+ lower class
+ upper class
+ wealth
+ filthy rich
+
+[min+wage] [min-wage-init] . [digit] [digit]
+
+pragma range-rule [min-wage-init] 6 8
+
+[protect] bill of rights
+ first amendment
+ second amendment
+
+[tax-class] the rich
+ the filthy rich
+ the wealthy
+ billionaire
+ lottery winners
+
+pragma range-rule [ms-pieces] 2 50
+
+[subject] evolution
+ evilution
+ creationism
+
+[bad-thing] swear words
+ cuss words
+ profanities
+ expletives
+
+[org-goal-abolish] abolishing
+ repealing
+ eliminating
+
+[org-prefix] council
+ [intl-name] association
+ organization
+ united organization
+ union
+ federation
+ league
+ association
+ campaign
+ society
+ alliance
+ fellowship
+
+[intl-name] american
+ national
+ international
+
+[org-members] [org-members-prefix] [org-members-body]
+
+# This should just create a blank token
+[org-members-prefix]
+ radical
+ concerned
+ outraged
+ activist
+ caring
+ involved
+ civic-minded
+ conservative
+ liberal
+ reformist
+ socialist
+ communist
+ morally bankrupt
+
+[org-members-body] angst-ridden teenagers
+ baby boomers
+ bambi people
+ bible thumpers
+ church-goers
+ clergymen
+ democrats
+ [eco+members]
+ grandparents
+ hollywood movie stars
+ lawyers
+ lesbians
+ liberals
+ libertarians
+ lobbyists
+ minorities
+ parents
+ pointy haired bosses
+ republicans
+ soccer moms
+ socialists
+ state legislators
+ [tree+members]
+ [american+members]
+
+[eco+members] eco- [eco-suffix]
+
+[eco-suffix] watchdogs
+ freaks
+ terrorists
+ activists
+
+[tree+members] tree- [tree-suffix]
+
+[tree-suffix] huggers
+ worshippers
+
+[american+members] [american-prefix] -americans
+
+[american-prefix] african
+ asian
+ elbonian
+ native
+ mexican
diff --git a/RGens/data/sample-grammars/phone-number.gram b/RGens/data/sample-grammars/phone-number.gram
new file mode 100644
index 0000000..ac4f830
--- /dev/null
+++ b/RGens/data/sample-grammars/phone-number.gram
@@ -0,0 +1,22 @@
+[us-phone-number] [area+code] [full+num]
+ [intl+num]
+ [area+code] [full+num] ext. [ext+num]
+ [area+code] [letter+num]
+ [1800+num]
+ [1800+letter+num]
+
+pragma export-rule [us-phone-number]
+
+[area+code] ( [digit] [digit] [digit] )
+
+[full+num] [digit] [digit] [digit] - [digit] [digit] [digit] [digit]
+
+[intl+num] 1- [full+num]
+
+[ext+num] [digit-nozero] [digit] [digit]
+
+[letter+num] [digit] [digit] [digit] - [letter] [letter] [letter] [letter]
+
+[1800+num] 1-800- [digit] [digit] [digit] - [digit] [digit] [digit] [digit]
+
+[1800+letter+num] 1-800- [letter] [letter] [letter] [letter] [letter] [letter] [letter]
diff --git a/RGens/data/sample-grammars/president.gram b/RGens/data/sample-grammars/president.gram
new file mode 100644
index 0000000..63b928c
--- /dev/null
+++ b/RGens/data/sample-grammars/president.gram
@@ -0,0 +1,64 @@
+[us-president] george washington
+ john adams
+ thomas jefferson
+ james madison
+ james monroe
+ john quincy adams
+ andrew jackson
+ martin van buren
+ william henry harrison
+ john tyler
+ james polk
+ zachary taylor
+ millard fillmore
+ franklin pierce
+ james buchanan
+ abraham lincoln
+ andrew johnson
+ ulysses s grant
+ rutherford b. hayes
+ james garfield
+ chester a. arthur
+ grover cleveland
+ benjamin harrison
+ william mckinley
+ theodore roosevelt
+ william taft
+ woodrow wilson
+ warren g. harding
+ calvin coolidge
+ herbert hoover
+ franklin d. roosevelt
+ harry s truman
+ dwight eisenhower
+ john f. kennedy
+ lyndon b. johnson
+ richard nixon
+ gerald ford
+ jimmie carter
+ ronald reagan
+ george bush
+ bill clinton
+ george w. bush
+ barack obama
+ donald trump
+
+[us-president-common] washington
+ adams
+ jefferson
+ madison
+ monroe
+ adams
+ jackson
+ van buren
+ harrison
+ taylor
+ lincoln
+ johnson
+ garfield
+ roosevelt
+ wilson
+ truman
+
+pragma export-rule [us-president]
+pragma export-rule [us-president-common]
diff --git a/RGens/data/sample-grammars/realcity.long b/RGens/data/sample-grammars/realcity.long
deleted file mode 100644
index 1c11607..0000000
--- a/RGens/data/sample-grammars/realcity.long
+++ /dev/null
@@ -1,76 +0,0 @@
-Birmingham
-Anchorage
-Mesa
-Phoenix
-Tucson
-Anaheim
-Fresno
-Long Beach
-Los Angeles
-Oakland
-Riverside
-Sacramento
-San Diego
-San Francisco
-San Jose
-Santa Ana
-Stockton
-Aurora
-Colorado Springs
-Denver
-Washington
-Jacksonville
-Miami
-St. Petersburg
-Tampa
-Atlanta
-Honolulu
-Chicago
-Indianapolis
-Wichita
-Lexington
-Louisville
-Baton Rouge
-New Orleans
-Baltimore
-Boston
-Detroit
-Minneapolis
-St. Paul
-Kansas City
-St. Louis
-Omaha
-Las Vegas
-Jersey City
-Newark
-Albuquerque
-Buffalo
-New York
-Rochester
-Charlotte
-Raleigh
-Akron
-Cincinnati
-Cleveland
-Columbus
-Toledo
-Oklahoma City
-Tulsa
-Portland
-Philadelphia
-Pittsburgh
-Memphis
-Nashville
-Arlington
-Austin
-Corpus Christi
-Dallas
-El Paso
-Fort Worth
-Houston
-San Antonio
-Norfolk
-Richmond
-Virginia Beach
-Seattle
-Milwaukee
diff --git a/RGens/data/sample-grammars/realcompany.long b/RGens/data/sample-grammars/realcompany.long
deleted file mode 100644
index 4f924df..0000000
--- a/RGens/data/sample-grammars/realcompany.long
+++ /dev/null
@@ -1,207 +0,0 @@
-3Com
-AFLAC
-AT&T
-Ace Hardware
-Aetna
-Aid Association for Lutherans
-Albertson's
-Allstate
-Alltel
-AmerenUE
-America Online
-American Express
-American General
-Ames Department Stores
-Anheuser-Busch
-Apple Computer
-Archer Daniels Midland
-AutoZone
-Avis Rent A Car
-Avon Products
-B.F. Goodrich
-Bank of America Corp.
-Barnes & Noble
-Bell Atlantic
-BellSouth
-Berkshire Hathaway
-Best Buy
-Black & Decker
-Boeing
-Bristol-Myers Squibb
-Burlington Northern Santa Fe
-CBS
-CVS
-Cablevision Systems
-Campbell Soup
-Caterpillar
-Cendant
-Charles Schwab
-Chase Manhattan Corp.
-Chevron
-Cigna
-Cinergy
-Circuit City Group
-Cisco Systems
-Citigroup
-Clorox
-Coastal
-Coca-Cola
-Colgate-Palmolive
-Columbia/HCA Healthcare
-Comcast
-Comerica
-CompUSA
-Compaq Computer
-Computer Associates Intl.
-ConAgra
-Conoco
-Conseco
-Continental Airlines
-Corning
-Costco Wholesale
-Dana
-Dell Computer
-Delta Air Lines
-Dillard's
-Dole Food
-Dollar General
-Dow Chemical
-Eastman Kodak
-Eli Lilly
-Este Lauder
-Exxon Mobil
-Fannie Mae
-Farmland Industries
-FedEx
-Firstar Corp.
-Fleetwood Enterprises
-Ford Motor
-GTE
-Gannett
-Gap
-Gateway
-General Electric
-General Mills
-General Motors
-Gillette
-Goldman Sachs Group
-Goodyear Tire & Rubber
-H.J. Heinz
-Hartford Financial Services
-Hasbro
-Healthsouth
-Hershey Foods
-Hewlett-Packard
-Home Depot
-Honeywell International
-Hormel Foods
-ITT Industries
-Ikon Office Solutions
-Ingersoll-Rand
-Intel
-IBM
-J.C. Penney
-J.P. Morgan & Co.
-John Hancock Financial Services
-Johnson & Johnson
-Kellogg
-Kimberly-Clark
-Kmart
-Knight-Ridder
-Kroger
-Lexmark International
-Lockheed Martin
-Lowe's
-Lucent Technologies
-MCI WorldCom
-Marriott International
-Mattel
-Maytag
-McDonald's
-McGraw-Hill
-Merck
-Merrill Lynch
-Metropolitan Life Insurance
-Micron Technology
-Microsoft
-Monsanto
-Morgan Stanley Dean Witter
-Motorola
-Mutual of Omaha Insurance
-NCR
-Nabisco Group Holdings
-New York Life Insurance
-New York Times
-Newell Rubbermaid
-Nextel Communications
-Nike
-Nordstrom
-Northwest Airlines
-Office Depot
-OfficeMax
-Oracle
-Owens Corning
-Paine Webber Group
-PepsiCo
-Pfizer
-Pharmacia & Upjohn
-Philip Morris
-Procter & Gamble
-Providian Financial
-Prudential Ins. Co. of America
-Quaker Oats
-Qualcomm
-Quantum
-Qwest Communications
-R. J. Reynolds Tobacco
-Ralston Purina
-Raytheon
-Rockwell International
-SBC Communications
-Safeway
-Saks
-Sara Lee
-Seagate Technology
-Sears Roebuck
-ServiceMaster
-Sherwin-Williams
-Shopko Stores
-Sodexho Marriott Services
-Southwest Airlines
-Sprint
-Staples
-State Farm Insurance Cos.
-Sun Microsystems
-SunTrust Banks
-Sunoco
-Supervalu
-Tandy
-Target
-Tenet Healthcare
-Texaco
-Texas Instruments
-Time Warner
-Times Mirror
-Toys `R' Us
-Trans World Airlines
-Tyson Foods
-U.S. Bancorp
-US Airways Group
-US West
-Ultramar Diamond Shamrock
-Union Carbide
-Union Pacific
-Unisys
-United Parcel Service
-UnitedHealth Group
-Universal
-Viacom
-Wal-Mart Stores
-Walgreen
-Walt Disney
-Warner-Lambert
-Wells Fargo
-Weyerhaeuser
-Whirlpool
-Winn-Dixie Stores
-Xerox
diff --git a/RGens/data/sample-grammars/school.gram b/RGens/data/sample-grammars/school.gram
new file mode 100644
index 0000000..edce444
--- /dev/null
+++ b/RGens/data/sample-grammars/school.gram
@@ -0,0 +1,17 @@
+[public-school-fullname] [public-school] [school-type]
+
+pragma initial-rule [public-school-fullname]
+pragma export-rule [public-school]
+
+[school-type] high school
+ middle school
+ grade school
+ elementary school
+
+[public-school] [us-president]
+ [us-president] memorial
+ [person]
+ [last-name]
+ [city] central
+ [city]
+ [cardinal] [city]
diff --git a/RGens/data/sample-grammars/slashdot.gram b/RGens/data/sample-grammars/slashdot.gram
new file mode 100644
index 0000000..8ad902b
--- /dev/null
+++ b/RGens/data/sample-grammars/slashdot.gram
@@ -0,0 +1,62 @@
+[slashdot-jonkatz] [jonkatz-prefix1] : [jonkatz-1]
+ [jonkatz-1]
+
+pragma initial-rule [slashdot-jonkatz]
+
+[jonkatz-1] [jonkatz-issues] , [jonkatz-issues] and the [jonkatz-issues2]
+ [jonkatz-verbs1] [jonkatz-actionsofthem] [jonkatz-issues]
+ [jonkazt-prefix2] [jonkatz-actionsofthem] [jonkatz-issues]
+
+[jonkatz-prefix1] analysis
+ unplugged
+ part [number-word]
+ feature
+ jon katz
+ the windbag speaks
+
+[jonkatz-prefix2] the rise of
+ brief history of
+ the road to
+ the myth of
+ voices from
+ descent into
+ at the crossroads of
+ showdown with
+ the era of
+ the power of
+ the death of
+ the nation of
+ some good news from
+ beyond
+
+[jonkatz-verbs1] dealing with
+ handling
+ facing
+ coping with
+ fighting
+ challenging
+
+[jonkatz-actionsofthem] war on
+ battle against
+ heavy-handed crusade against
+ draconian retaliation against
+ foolish crackdown on
+ crazy attempts to ban
+
+[jonkatz-issues] criminal libel
+ free speech
+ free music
+ fighting monopolies
+ repealing unjust laws
+ software patents
+ geek profiling
+ sexbots
+ free pornography
+
+[jonkatz-issues2] net
+ world
+ internet
+ worldwide community
+ web
+ geek population
+ future
diff --git a/RGens/data/sample-grammars/states.gram b/RGens/data/sample-grammars/states.gram
new file mode 100644
index 0000000..43f1402
--- /dev/null
+++ b/RGens/data/sample-grammars/states.gram
@@ -0,0 +1,156 @@
+[us-state] alabama
+ alaska
+ arizona
+ arkansas
+ california
+ colorado
+ connecticut
+ delaware
+ florida
+ georgia
+ hawaii
+ idaho
+ illinois
+ indiana
+ iowa
+ kansas
+ kentucky
+ louisiana
+ maine
+ maryland
+ massachusetts
+ michigan
+ minnesota
+ mississippi
+ missouri
+ montana
+ nebraska
+ nevada
+ new hampshire
+ new jersey
+ new mexico
+ new york
+ north carolina
+ north dakota
+ ohio
+ oklahoma
+ oregon
+ pennsylvania
+ rhode island
+ south carolina
+ south dakota
+ tennessee
+ texas
+ utah
+ vermont
+ virginia
+ washington
+ west virginia
+ wisconsin
+ wyoming
+
+pragma export-rule [us-state]
+pragma export-rule [us-postalstate]
+pragma export-rule [us-stateadj]
+
+[us-postalstate] al
+ ak
+ az
+ ar
+ ca
+ co
+ ct
+ de
+ fl
+ ga
+ hi
+ id
+ il
+ in
+ ia
+ ks
+ ky
+ la
+ me
+ md
+ ma
+ mi
+ mn
+ ms
+ mo
+ mt
+ ne
+ nv
+ nh
+ nj
+ nm
+ ny
+ nc
+ nd
+ oh
+ ok
+ or
+ pa
+ ri
+ sc
+ sd
+ tn
+ tx
+ ut
+ vt
+ va
+ wa
+ wv
+ wi
+ wy
+
+[us-stateadj] alabaman
+ alaskan
+ arizonan
+ arkansasan
+ californian
+ coloradoan
+ connecticutter
+ delawarian
+ floridian
+ georgian
+ hawaiian
+ idahoan
+ illinoisan
+ indianan
+ iowan
+ kansan
+ kentuckian
+ louisianan
+ maineian
+ marylandian
+ massachusettsian
+ michiganian
+ minnesotan
+ mississippian
+ missourian
+ montanan
+ nebraskan
+ nevadan
+ new hampshireian
+ new jerseyian
+ new mexican
+ new yorkian
+ north carolinan
+ north dakotan
+ ohioan
+ oklahoman
+ oregonian
+ pennsylvanian
+ rhode islander
+ south carolinan
+ south dakotan
+ tennesseean
+ texan
+ utahan
+ vermontian
+ virginian
+ washingtonian
+ west virginian
+ wisconsiner
+ wyominger
diff --git a/RGens/data/sample-grammars/theory.gram b/RGens/data/sample-grammars/theory.gram
new file mode 100644
index 0000000..af2ce49
--- /dev/null
+++ b/RGens/data/sample-grammars/theory.gram
@@ -0,0 +1,25 @@
+[theory] [plural+last] [theory-suffix]
+ [plural+last] [theory-suffix]
+ the [2+last-name] [theory-suffix]
+ the [2+last-name] [theory-suffix]
+ the [2+last-name] [theory-suffix]
+ the [3+last-name] [theory-suffix]
+ [plural+last] [ordinal] [theory-suffix]
+ the [last-name] [theory-suffix]
+ the [last-name] [theory-suffix]
+
+pragma initial-rule [theory]
+
+[plural+last] [last-name] 's
+
+[2+last-name] [last-name] - [last-name]
+
+[3+last-name] [last-name] - [last-name] - [last-name]
+
+[theory-suffix] theory
+ law
+ theorem
+ postulate
+ conjecture
+ principle
+ hypothesis
diff --git a/RGens/data/sample-grammars/townname.long b/RGens/data/sample-grammars/townname.long
deleted file mode 100644
index 077c6f5..0000000
--- a/RGens/data/sample-grammars/townname.long
+++ /dev/null
@@ -1,141 +0,0 @@
-Sullivan
-Jakin
-Geneva
-Coleharbor
-Cadiz
-Dawson
-Turon
-Salem
-Pax
-Dakota
-Moorefield
-Zenda
-Mettawa
-Orchard
-Busby
-Cloudcroft
-Perla
-Burlington
-Morrison
-Blackburn
-Jerico
-Skykomish
-Dupree
-Dawson
-Bowers
-Star
-Dorrance
-Roberts
-Carbon
-Hopedale
-Croghan
-Elgin
-Holland
-Berkley
-Sherrill
-Varna
-Owen
-Oxford
-Drake
-Notus
-Hobgood
-Thacker
-Springfield
-Fraser
-Avon
-Audubon
-Waterloo
-Windsor
-Atoka
-Cherry
-Hudson
-Kechi
-Pickstown
-Elizabeth
-Holt
-Stapleton
-Kell
-Gardena
-Osceola
-Moscow
-Morrison
-Mustang
-Maxwell
-Francis
-Eureka
-Darlington
-Ely
-Bancroft
-Hanover
-Milano
-Cabery
-Byars
-Gully
-Sherwood
-Reklaw
-Watkins
-Heartwell
-Dawson
-Vermont
-Goldville
-Paxson
-Potwin
-Sherman
-Glenbeulah
-Sunset
-Clearwater
-Solen
-Altamont
-Dyer
-Murray
-Rathbun
-Huntleigh
-Poulan
-Burlington
-Jackson
-Verndale
-Cleveland
-Josephine
-Leland
-Carrollton
-Vance
-Sumner
-Tira
-Mead
-Gumbranch
-Glenwood
-Harrison
-Hannibal
-Carthage
-Callao
-Bussey
-Coaldale
-Chugwater
-Andale
-Adell
-Farber
-Carlton
-Prue
-Tenney
-Walcott
-Udall
-Brighton
-Minburn
-Swan
-Frazer
-Menlo
-Bassett
-Massena
-Trommald
-Waynesfield
-Lynd
-Mendon
-Hammond
-Simsboro
-Thornton
-Crary
-Reynolds
-Turton
-Perry
-Penasco
-Loami
diff --git a/RGens/data/sample-grammars/trademark.gram b/RGens/data/sample-grammars/trademark.gram
new file mode 100644
index 0000000..7ec2fef
--- /dev/null
+++ b/RGens/data/sample-grammars/trademark.gram
@@ -0,0 +1,186 @@
+[trademark] [actual+trademark]
+
+pragma initial-rule [trademark]
+
+[actual+trademark] [syllable] [trademark-suffix]
+ [random-name] [trademark-suffix]
+ [buzzword-stem] [buzzword-suffix]
+ [trademark-fragment] [trademark-suffix]
+
+[trademark-suffix] ent
+ izon
+ ium
+ ilium
+ ilon
+ ate
+ atium
+ ian
+
+[trademark-fragment] accel
+ ver
+ agil
+ pent
+ itan
+ celer
+ quali
+ free
+ syn
+ dyna [consonant]
+ cor
+ excel
+ valu [consonant]
+ top
+ fav
+ vant
+ cert
+ eq
+ cere
+ mor
+
+[trademark+drug] [trademark-drug-fragment] [trademark-drug-suffix]
+ [trademark-drug-fragment] [trademark-drug-suffix]
+ [trademark-drug-fragment] [trademark-drug-suffix]
+ [trademark-fragment] [trademark-drug-suffix]
+ [trademark-fragment] [trademark-drug-fragment] [trademark-drug-suffix]
+ [syllable] [trademark-drug-fragment] [trademark-drug-suffix]
+ [trademark-drug-fragment] [syllable] [trademark-drug-suffix]
+
+pragma export-rule [trademark+drug]
+
+[trademark-drug-fragment] can
+ cid
+ asper
+ fem
+ let
+ tam
+ tri [consonant]
+ zia
+ epi
+ retro
+ vu
+ zido
+ aba
+ nova
+ immu
+ kal
+ uni
+ lev [vowel]
+ thy
+ rox
+ gluco
+ gly
+ bur
+ met
+ form
+ dia
+ van
+ mala
+ sara
+ fem
+ pro
+ flu
+ ox
+ oxy
+ apli
+ opti
+ mylo
+ exe
+ tar
+ riva
+ sti [consonant]
+ zy [consonant]
+ mo
+ acti
+ estr
+ thin
+ via [vowel]
+ zone
+ huma
+ andro
+ prev
+ caf
+ proto
+ tri
+ duo
+ quadr [vowel]
+ lept
+ tequ
+ quino
+ [consonant-group] ox
+ ino
+ taxo
+ pen
+ cyclo
+ ciclo
+ zol
+ sert
+ meta
+ [consonant] epp
+ rem [vowel]
+ com
+ [vowel] sel
+ [consonant] apa
+ sirp
+ repro
+ aic
+ son
+ temo
+ neo
+ ant [vowel]
+ ky [consonant]
+ rel
+ rito
+ avan
+ gen
+
+[trademark-drug-suffix] [letter] as
+ [vowel] ra
+ [consonant] ole
+ [vowel] flue
+ [vowel] v [vowel] r
+ vir
+ g [vowel] n
+ dine
+ [consonant] ine
+ [consonant-group] one
+ nex
+ rex
+ [consonant] ex
+ etra
+ oid
+ [consonant-group] oid
+ vance
+ ide
+ iqa
+ iqua
+ zac
+ [consonant] ac
+ graf
+ var
+ [consonant] arg
+ lon
+ bic
+ [consonant] ella
+ [vowel] diol
+ ate
+ dyne
+ gran
+ [vowel] mide
+ log
+ [consonant] ar
+ cit
+ nix
+ t [vowel] l
+ max
+ [consonant] ere
+ oft
+ [vowel] line
+ [consonant] et [vowel] m
+ [consonant] ade
+ [consonant] imus
+ phex
+ ata
+ tr [vowel] l
+ [vowel] nza
+ [vowel] [consonant] [vowel] x
+
diff --git a/RGens/data/sample-grammars/username.gram b/RGens/data/sample-grammars/username.gram
deleted file mode 100644
index c2ea622..0000000
--- a/RGens/data/sample-grammars/username.gram
+++ /dev/null
@@ -1,12 +0,0 @@
-[username] [[actual-username]]
-
-pragma initial-rule [username]
-
-[actual-username] [random-name]
- [middle-initial] [random-name]
- [middle-initial] [last-name]
- [first-name] . [last-name]
- [first-name]
- [random-name] [num-range]
-
-pragma range-rule [num-range] 1 999
diff --git a/RGens/data/sample-grammars/web.gram b/RGens/data/sample-grammars/web.gram
index f17309b..0c2fbf7 100644
--- a/RGens/data/sample-grammars/web.gram
+++ b/RGens/data/sample-grammars/web.gram
@@ -1,17 +1,19 @@
-[email] [[actual-email]]
+[email] [actual+email]
-[fake-email] [[actual-fake-email]]
+[fake-email] [actual+fake-email]
-[username] [[actual-username]]
+[username] [actual+username]
-[url] [[actual-url]]
+[url] [actual+url]
pragma initial-rule [email]
pragma export-rule [fake-email]
pragma export-rule [username]
+pragma export-rule [domain-name]
pragma export-rule [url]
+pragma export-rule [big-tld]
-[actual-email] [username] @ [subdomain-name] . [domain]
+[actual+email] [username] @ [subdomain-name] . [domain]
[username] @mail. [domain]
[username] @ [domain]
[username] @ [domain]
@@ -25,7 +27,7 @@ pragma export-rule [url]
[first-last] [first-name]
[first-name] - [last-name]
-[actual-fake-email] [username] @ [subdomain-name] . [fake-domain]
+[actual+fake-email] [username] @ [subdomain-name] . [fake-domain]
[username] @mail. [fake-domain]
[acronym] @ [fake-domain]
[email-alias] @ [fake-domain]
@@ -43,8 +45,7 @@ pragma export-rule [url]
mail
root
-
-[actual-username] [random-name]
+[actual+username] [random-name]
[middle-initial] [random-name]
[middle-initial] [last-name]
[first-name] . [last-name]
@@ -53,16 +54,21 @@ pragma export-rule [url]
pragma range-rule [num-range] 1 999
-[actual-url] http://www. [domain] /
+[actual+url] http://www. [domain] /
http://www. [domain] /
http:// [subdomain-name] . [domain] /
http://www. [last-name] . [tld] /
http:// [username] . [domain] /
[url-with-path]
-[url-with-path] http://www.geocities.com/ [neighborhood] / [digit-non0] [digit] [digit] [digit] /
+[url-with-path] http://www.geocities.com/ [neighborhood] / [digit-nozero] [digit] [digit] [digit] /
http:// [url-begin] . [acronym] .net/ [url-username] /
-
+ http:// [url-begin] . [town-name] .net/ [url-username]
+ http:// [subdomain-name] . [acronym] .net/ [url-username]
+ http:// [subdomain-name] . [town-name] .net/ [url-username]
+ http:// [subdomain-name] . [last-name] . [big-tld] / [url-username]
+ http:// [username] . [acronym] .net/
+ http:// [username] . [url-state] [us-postalstate] .edu/
[neighborhood] siliconvalley
heartland
@@ -87,3 +93,78 @@ pragma range-rule [num-range] 1 999
univ
u
+[domain] [domain-name] . [tld]
+ [domain-name] . [big-tld]
+
+[fake-domain] [domain-name] [fake-ending]
+
+[fake-ending] .con
+ .con
+ .not
+ .null
+ .usa
+ .com.uk
+ .con
+ .dot
+ .fake
+ .faux
+ .spam
+ .tld
+
+[domain-name] [domain+name]
+
+[domain+name] [acronym]
+ [random-name]
+ [last-name] - [last-name]
+ [first-name] - [last-name]
+ [letter] - [last-name]
+ [consonant] [vowel] [consonant]
+ [consonant-group] [vowel-group] [consonant]
+ [vowel-group] [consonant-group]
+ [letter] [vowel] [letter]
+ [town-name]
+ [last-name]
+ [syllable] [syllable]
+
+[tld] com
+ com
+ com
+ com
+ com
+ net
+ net
+ org
+ org
+ edu
+ de
+ ca
+ com.au
+ co.uk
+ fr
+ nu
+ to
+ se
+ no
+
+[big-tld] com
+ com
+ net
+ org
+
+[subdomain-name] venus
+ mars
+ jupiter
+ pluto
+ saturn
+ neptune
+ mail
+ www2
+ www [digit]
+ alpha
+ beta
+ gamma
+ omega
+ [random-name]
+ [first-name]
+ [last-name]
+ [acronym]
diff --git a/RGens/data/server-config-sample.cfg b/RGens/data/server-config-sample.cfg
index e69246a..64d74cb 100644
--- a/RGens/data/server-config-sample.cfg
+++ b/RGens/data/server-config-sample.cfg
@@ -1,38 +1,2 @@
-# Load Diablo II grammar
-data/sample-grammars/diablo-ii/diabloii.gram
-data/sample-grammars/diablo-ii/diabloiiitems.gram
-data/sample-grammars/diablo-ii/diabloiiperish.gram
-data/sample-grammars/diablo-ii/diabloiiprefixes.gram
-data/sample-grammars/diablo-ii/diabloiisuffixes.gram
-
-# Misc. grammars
-data/sample-grammars/24hr-rpg.gram
-data/sample-grammars/anime.gram
-data/sample-grammars/art-objects.gram
-data/sample-grammars/awe-names.gram
-data/sample-grammars/college.gram
-data/sample-grammars/dungeon-enviroment.gram
-data/sample-grammars/email.gram
-data/sample-grammars/fantasy-locations.gram
-data/sample-grammars/genre-fiction.gram
-data/sample-grammars/horror.gram
-data/sample-grammars/insults.gram
-data/sample-grammars/martial-arts.gram
-data/sample-grammars/mary-sue.gram
-data/sample-grammars/mission.gram
-data/sample-grammars/part-creature.gram
-data/sample-grammars/pokeattacks.gram
-data/sample-grammars/rune.gram
-data/sample-grammars/superhero.gram
-data/sample-grammars/tarotcard.gram
-data/sample-grammars/technobabble.gram
-data/sample-grammars/zadrons-pouch.gram
-
-# Long rules
-data/sample-grammars/firstname-female.long first-name-female
-data/sample-grammars/firstname-male.long first-name-male
-data/sample-grammars/lastname.long last-name
-data/sample-grammars/realcity.long real-city
-data/sample-grammars/realcompany.long real-company
-data/sample-grammars/syllable.long syllable
-data/sample-grammars/townname.long town-name
+# Load ALL the data recursively
+data/sample-grammars/
diff --git a/RGens/pom.xml b/RGens/pom.xml
index 425028c..f59a2c3 100644
--- a/RGens/pom.xml
+++ b/RGens/pom.xml
@@ -14,18 +14,23 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
- <version>1.2.1</version>
- <configuration>
- <mainClass>bjc.RGens.server.GrammarServer</mainClass>
+ <version>1.2.1</version>
+ <configuration>
+ <mainClass>bjc.RGens.server.GrammarServer</mainClass>
<arguments>
- <argument>-c</argument>
+ <!-- Uncomment for debug mode -->
+ <argument>-d</argument>
+ <argument>-lc</argument>
<argument>data/server-config-sample.cfg</argument>
+ <argument>-st</argument>
+ <argument>*</argument>
+ <!-- <argument>-i</argument> -->
</arguments>
- </configuration>
+ </configuration>
</plugin>
</plugins>
</build>
-
+
<groupId>bjc</groupId>
<artifactId>RGens</artifactId>
<version>0.0.1-SNAPSHOT</version>
diff --git a/RGens/src/main/java/bjc/RGens/server/CLIArgsParser.java b/RGens/src/main/java/bjc/RGens/server/CLIArgsParser.java
new file mode 100644
index 0000000..a39ce1d
--- /dev/null
+++ b/RGens/src/main/java/bjc/RGens/server/CLIArgsParser.java
@@ -0,0 +1,141 @@
+package bjc.RGens.server;
+
+import java.io.File;
+
+public class CLIArgsParser {
+ public static void parseArgs(String[] args, GrammarServerEngine eng) {
+ boolean didTerminalOp = false;
+ boolean forceInteractive = false;
+
+ // @TODO report error status
+ boolean didError = false;
+
+ if(args.length < 0) return;
+
+ if(args.length == 1 && args[0].equals("--help")) {
+ // @TODO show help
+ } else {
+ for(int i = 0; i < args.length; i++) {
+ String arg = args[i];
+
+ switch(arg) {
+ case "-lc":
+ case "--load-config-file":
+ String configFileName = args[++i];
+
+ eng.doLoadConfig(configFileName);
+ break;
+ case "-lg":
+ case "--load-grammar-file":
+ String grammarFileName = args[++i];
+
+ File grammarFile = new File(grammarFileName);
+
+ String ruleName = grammarFile.getName();
+ ruleName = ruleName.substring(0, ruleName.lastIndexOf('.'));
+
+ if(!args[i+1].startsWith("-")) {
+ ruleName = args[++i];
+ }
+
+ eng.doLoadGrammar(ruleName, grammarFileName);
+
+ break;
+ case "-ll":
+ case "--load-long-file":
+ String longRuleFileName = args[++i];
+
+ File longRuleFile = new File(longRuleFileName);
+
+ String longRuleName = longRuleFile.getName();
+ longRuleName = longRuleName.substring(0, longRuleName.lastIndexOf('.'));
+
+ if(!args[i+1].startsWith("-")) {
+ longRuleName = args[++i];
+ }
+
+ eng.doLoadLongRule(longRuleName, longRuleFileName);
+
+ break;
+ case "-ge":
+ case "--generate-exported-rule":
+ String exportedRuleName = args[++i];
+
+ if(eng.hasExportedRule(exportedRuleName)) {
+ eng.doGenerateExportedRule(exportedRuleName);
+ didTerminalOp = true;
+ } else {
+ System.out.printf("Error: No exported rule named %s\n", exportedRuleName);
+ }
+ break;
+ case "-gg":
+ case "--generate-grammar-rule":
+ String grammarName = args[++i];
+
+ if(!eng.hasLoadedGrammar(grammarName)) {
+ System.out.printf("Error: No grammar named %s\n", grammarName);
+ } else {
+ String ruleToGenerate = "";
+
+ if(!args[i+1].startsWith("-")) {
+ ruleToGenerate = args[++i];
+ } else if(eng.hasInitialRule(grammarName)) {
+ ruleToGenerate = eng.getInitialRule(grammarName);
+ } else {
+ System.out.printf("Error: Grammar %s has no initial rule. A "
+ + "rule must be provided.",grammarName);
+ }
+
+ eng.doGenerateGrammar(grammarName, ruleToGenerate);
+ didTerminalOp = true;
+ }
+ break;
+ case "-st":
+ case "--stress-test":
+ String thingToTest = args[++i];
+
+ // @TODO support testing rules from grammars
+ // as well as a specified number of times
+ if(thingToTest.equals("*")) {
+ eng.doStressTest(10000);
+ } else {
+ eng.doStressTest(thingToTest, 1000);
+ }
+
+ didTerminalOp = true;
+
+ break;
+ case "-d":
+ case "--debug":
+ if(eng.debugMode) {
+ System.out.println("Warning: debug mode is already on. Use -nd or --no-debug"
+ + " to turn it off");
+ } else {
+ eng.debugMode = true;
+ }
+ break;
+ case "-nd":
+ case "--no-debug":
+ if(!eng.debugMode) {
+ System.out.println("Warning: debug mode is already off. Use -d or --debug"
+ + " to turn it on");
+ } else {
+ eng.debugMode = false;
+ }
+ break;
+ case "-i":
+ case "--interactive":
+ forceInteractive = true;
+ break;
+ default:
+ System.out.println("Error: Unrecognized argument " + arg);
+ break;
+ }
+ }
+ }
+
+ if(!forceInteractive && didTerminalOp) {
+ System.exit(didError ? 1 : 0);
+ }
+ }
+}
diff --git a/RGens/src/main/java/bjc/RGens/server/GrammarServerEngine.java b/RGens/src/main/java/bjc/RGens/server/GrammarServerEngine.java
new file mode 100644
index 0000000..0fe96d9
--- /dev/null
+++ b/RGens/src/main/java/bjc/RGens/server/GrammarServerEngine.java
@@ -0,0 +1,300 @@
+package bjc.RGens.server;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.Scanner;
+
+import bjc.utils.funcdata.FunctionalList;
+import bjc.utils.funcdata.IList;
+import bjc.utils.funcdata.IMap;
+import bjc.utils.funcutils.ListUtils;
+import bjc.utils.gen.WeightedGrammar;
+
+public class GrammarServerEngine {
+ private IMap<String, WeightedGrammar<String>> loadedGrammars;
+ private IMap<String, WeightedGrammar<String>> exportedRules;
+
+ public static boolean debugMode = false;
+
+ public GrammarServerEngine(IMap<String, WeightedGrammar<String>> loadedGrammars,
+ IMap<String, WeightedGrammar<String>> exportedRules) {
+ this.loadedGrammars = loadedGrammars;
+ this.exportedRules = exportedRules;
+ }
+
+ public String getInitialRule(String grammarName) {
+ return loadedGrammars.get(grammarName).getInitialRule();
+ }
+
+ public boolean hasInitialRule(String grammarName) {
+ return loadedGrammars.get(grammarName).hasInitialRule();
+ }
+
+ public boolean hasExportedRule(String ruleName) {
+ return exportedRules.containsKey(ruleName);
+ }
+
+ public boolean hasLoadedGrammar(String grammarName) {
+ return loadedGrammars.containsKey(grammarName);
+ }
+
+ public void doLoadConfig(String fileName) {
+ File inputFile = new File(fileName);
+
+ try(FileInputStream inputStream = new FileInputStream(inputFile)) {
+ try(Scanner fle = new Scanner(inputStream)) {
+ while(fle.hasNextLine()) {
+ String line = fle.nextLine().trim();
+
+ // Handle comments
+ if(line.equals("") ||
+ line.startsWith("#") ||
+ line.startsWith("//")) {
+ continue;
+ }
+
+ // Handle mixed whitespace in input
+ line = line.replaceAll("\\s+", " ");
+
+ String path;
+ String name;
+
+ if(line.lastIndexOf(' ') != -1) {
+ path = line.substring(0, line.lastIndexOf(' '));
+ name = line.substring(line.lastIndexOf(' ') + 1, line.length());
+ } else {
+ path = line;
+
+ File pathFile = new File(path);
+ String pathName = pathFile.getName();
+
+ if(pathFile.isDirectory()) {
+ // Load all the files in the directory recursively
+ Queue<File> entries = new LinkedList<>();
+
+ for (File entry : pathFile.listFiles()) {
+ entries.add(entry);
+ }
+
+ while(!entries.isEmpty()) {
+ File entry = entries.poll();
+
+ String entryPath = entry.getName();
+
+ if(entry.isHidden()) continue;
+ if(entry.isDirectory()) {
+ for (File newEntry : entry.listFiles()) {
+ entries.add(newEntry);
+ }
+
+ continue;
+ }
+
+ name = entryPath.substring(0, entryPath.lastIndexOf('.'));
+
+ doLoadGrammarEntry(entry.toString(), name);
+ }
+
+ continue;
+ }
+
+ name = pathName.substring(0, pathName.lastIndexOf('.'));
+ }
+
+ doLoadGrammarEntry(path, name);
+ }
+ }
+ } catch(IOException ioex) {
+ System.out.printf("? Error reading configuration from file"
+ + " (reason: %s)\n", ioex.getMessage());
+ }
+ }
+
+ private void doLoadGrammarEntry(String path, String name) {
+ if(path.endsWith(".gram")) {
+ doLoadGrammar(name, path);
+ } else if(path.endsWith(".template")) {
+ System.out.println("Error: Templates are not supported yet");
+ } else if(path.endsWith(".long")) {
+ doLoadLongRule(name, path);
+ } else {
+ System.out.println("Error: Unknown filetype " +
+ path.substring(path.lastIndexOf("."), path.length()));
+ }
+ }
+
+ public void doLoadLongRule(String ruleName, String ruleFile) {
+ ruleName = "[" + ruleName + "]";
+
+ if(debugMode) {
+ System.out.printf("Loading long rule (named %s) from path %s\n",
+ ruleName, ruleFile);
+ }
+
+ try (FileInputStream inputStream = new FileInputStream(ruleFile)) {
+ try (Scanner fle = new Scanner(inputStream)) {
+ IList<IList<String>> ruleParts = new FunctionalList<>();
+
+ while(fle.hasNextLine()) {
+ ruleParts.add(new FunctionalList<>(fle.nextLine().trim().split(" ")));
+ }
+
+ WeightedGrammar<String> longGram = new WeightedGrammar<>();
+
+ longGram.addSpecialRule(ruleName, () -> ruleParts.randItem());
+ longGram.setInitialRule(ruleName);
+
+ exportedRules.put(ruleName, longGram);
+
+ if(debugMode) {
+ System.out.printf("Loaded long rule (named %s) from path %s\n",
+ ruleName, ruleFile);
+ }
+ }
+ } catch (IOException ioex) {
+ System.out.printf("Error reading long rule (%s)\n", ioex.getMessage());
+ }
+ }
+
+ public void doLoadGrammar(String grammarName, String grammarPath) {
+ if(debugMode) {
+ System.out.printf("Loading grammar (named %s) from path %s\n",
+ grammarName, grammarPath);
+ }
+
+ try (FileInputStream inputStream = new FileInputStream(grammarPath)) {
+ WeightedGrammar<String> newGram =
+ ServerGrammarReader.fromStream(inputStream).merge((gram, exports) -> {
+ for(String export : exports.toIterable()) {
+ if(debugMode) {
+ System.out.printf("\tLoaded exported rule %s from grammar %s\n",
+ export, grammarName);
+
+ if(exportedRules.containsKey(export)) {
+ System.out.printf("\tWarning: Exported rule %s from grammar %s" +
+ " shadows a pre-existing rule\n", export, grammarName);
+ }
+ }
+
+ exportedRules.put(export, gram);
+ }
+
+ return gram;
+ });
+
+ loadedGrammars.put(grammarName, newGram);
+ } catch (IOException ioex) {
+ System.out.printf("? Error reading grammar from file"
+ + " (reason: %s)\n", ioex.getMessage());
+ }
+
+ if(debugMode) {
+ System.out.printf("Loaded grammar (named %s) from path %s\n",
+ grammarName, grammarPath);
+ }
+ }
+
+ public void doGenerateExportedRule(String ruleName) {
+ String ruleResult = ListUtils.collapseTokens(
+ exportedRules.get(ruleName)
+ .generateListValues(ruleName, " "));
+
+ System.out.println("Generated Result: ");
+ System.out.println("\t" + ruleResult.replaceAll("\\s+", " "));
+ }
+
+ public void doGenerateGrammar(String currentGram, String ruleName) {
+ doGenerateGrammar(loadedGrammars.get(currentGram), ruleName);
+ }
+
+ public void doGenerateGrammar(WeightedGrammar<String> currentGram, String ruleName) {
+ String ruleResult = ListUtils.collapseTokens(
+ currentGram.generateListValues(ruleName, " "));
+
+ System.out.println("Generated Result: ");
+ System.out.println("\t" + ruleResult.replaceAll("\\s+", " "));
+ }
+
+ public void doShowExportedRules() {
+ System.out.printf("Currently exported rules (%d total):\n",
+ exportedRules.getSize());
+
+ exportedRules.forEachKey(key -> {
+ System.out.println("\t" + key);
+ });
+ }
+
+ public void doShowGrammarRules(String gramName) {
+ WeightedGrammar<String> gram = loadedGrammars.get(gramName);
+
+ IList<String> ruleNames = gram.getRuleNames();
+
+ System.out.printf("Rules for grammar %s (%d total)\n",
+ gramName, ruleNames.getSize());
+
+ ruleNames.forEach(rule -> {
+ System.out.println("\t" + rule);
+ });
+ }
+
+ public void doShowLoadedGrammars() {
+ System.out.printf("Currently loaded grammars (%d total):\n",
+ loadedGrammars.getSize());
+
+ loadedGrammars.forEachKey(key -> {
+ System.out.println("\t" + key);
+ });
+ }
+
+ public void doStressTest(int count) {
+ exportedRules.forEachKey(key -> {
+ doStressTest(key, count);
+ });
+ }
+
+ public void doStressTest(String ruleName, int count) {
+ doStressTest(exportedRules.get(ruleName), ruleName, count);
+ }
+
+ public void doStressTest(WeightedGrammar<String> gram, String ruleName, int count) {
+ if(debugMode) System.out.println("Stress-testing rule " + ruleName);
+
+ IList<String> res = new FunctionalList<>();
+ IList<String> foundTags = new FunctionalList<>();
+
+ boolean foundBroken = false;
+
+ for(int i = 0; i < count; i++) {
+ res = gram.generateListValues(ruleName, " ");
+
+ for(String tok : res.toIterable()) {
+ if(tok.matches("\\[\\S+\\]") && !foundTags.contains(tok)) {
+ System.out.println("\tWarning: Possible un-expanded rule " + tok + " found"
+ + " in expansion of " + ruleName);
+
+ doFindRule(tok);
+
+ foundBroken = true;
+
+ foundTags.add(tok);
+ }
+ }
+ }
+
+ if(debugMode) {
+ if(!foundBroken) System.out.printf("Rule %s succesfully passed stress-testing\n", ruleName);
+ else System.out.printf("Rule %s failed stress-testing\n", ruleName);
+ }
+ }
+
+ private void doFindRule(String ruleName) {
+ loadedGrammars.forEach((gramName, gram) -> {
+ if(gram.hasRule(ruleName)) {
+ System.out.printf("\t\tFound rule %s in grammar %s\n", ruleName, gramName);
+ }
+ });
+ }
+}
diff --git a/RGens/src/main/java/bjc/RGens/server/ServerGrammarReader.java b/RGens/src/main/java/bjc/RGens/server/ServerGrammarReader.java
index 62c59ff..da42b36 100644
--- a/RGens/src/main/java/bjc/RGens/server/ServerGrammarReader.java
+++ b/RGens/src/main/java/bjc/RGens/server/ServerGrammarReader.java
@@ -139,80 +139,40 @@ public class ServerGrammarReader {
System.out.println();
}
- private static void doCase(FunctionalStringTokenizer tokenizer, ReaderState state) {
- int ruleProbability = readOptionalProbability(tokenizer, state);
-
- state.addCase(ruleProbability, tokenizer.toList());
- }
-
- private static void initialRule(FunctionalStringTokenizer tokenizer, ReaderState state) {
- String initialRuleName = tokenizer.nextToken();
-
- state.setInitialRule(initialRuleName);
- }
-
private static IList<String> handleSpecialRule(IMap<String, IList<String>> vars, String strang,
WeightedGrammar<String> gramm) {
IList<String> retList = new FunctionalList<>();
if(strang.matches("\\[\\[\\S+\\]\\]")) {
- if(strang.matches("\\[\\S+:=\\S+\\]")) {
- String[] varParts = strang.split(":=");
-
- String varName = varParts[0].substring(1);
- String ruleName = varParts[1].substring(0, varParts[1].length());
-
- IList<String> varValue = gramm.generateGenericValues(
- ruleName, (s) -> s, " ");
-
- vars.put(varName, varValue);
+ if(strang.matches("\\[\\[\\S+:=\\S+\\]\\]")) {
+ doDefineExpandedVariable(vars, strang, gramm);
} else if(strang.matches("\\[\\[\\S+=\\S+\\]\\]")) {
- String[] varParts = strang.split("=");
-
- String varName = varParts[0].substring(1);
- String varValue = varParts[1].substring(0, varParts[1].length());
-
- vars.put(varName, new FunctionalList<>(varValue));
+ doDefineVariable(vars, strang);
} else if(strang.matches("\\[\\[\\S+\\]\\]")) {
- String ruleName = strang.substring(1, strang.length() - 1);
-
- IList<String> ruleValue = gramm.generateGenericValues(
- ruleName, (s) -> s, "");
+ if(GrammarServerEngine.debugMode) {
+ if(strang.contains("+"))
+ System.out.println("Double-triggering no-space rule " + strang);
+ else
+ System.out.println("Triggered alternate no-space rule " + strang);
+ }
+
+ doNoSpaceRule(strang, gramm, retList);
+ } else if (strang.contains("+")) {
+ if(GrammarServerEngine.debugMode)
+ System.out.println("Triggered alternate no-space rule " + strang);
- retList.add(ListUtils.collapseTokens(ruleValue));
+ doNoSpaceRule(strang, gramm, retList);
} else {
// @FIXME notify the user they did something wrong
retList.add(strang);
}
} else {
- if(strang.matches("\\[\\$\\S+\\]")) {
+ if(strang.matches("\\[\\$\\S+\\-\\S+\\]")) {
+ retList = doExpandVariableReference(vars, strang, gramm);
+ } else if(strang.matches("\\[\\$\\S+\\]")) {
String varName = strang.substring(2, strang.length());
retList = vars.get(varName);
- } else if(strang.matches("\\[\\$\\S+\\-\\S+\\]")) {
- String[] varParts = strang.substring(1, strang.length()).split("-");
-
- StringBuilder actualName = new StringBuilder("[");
-
- for(String varPart : varParts) {
- if(varPart.startsWith("$")) {
- IList<String> varName = vars.get(varPart.substring(1));
-
- if(varName.getSize() != 1) {
- // @FIXME notify the user they did something wrong
- }
-
- actualName.append(varName.first() + "-");
- } else {
- actualName.append(varPart + "-");
- }
- }
-
- // Trim trailing -
- actualName.deleteCharAt(actualName.length() - 1);
- actualName.append("]");
-
- retList = gramm.generateGenericValues(actualName.toString(), (s) -> s, " ");
} else if (exportedRules.containsKey(strang) &&
exportedRules.get(strang) != gramm &&
!gramm.hasRule(strang)) {
@@ -222,6 +182,8 @@ public class ServerGrammarReader {
WeightedGrammar<String> exportGram = exportedRules.get(strang);
retList = exportGram.generateGenericValues(strang, (s) -> s, " ");
+ } else if (strang.contains("+")) {
+ doNoSpaceRule(strang, gramm, retList);
} else {
// @FIXME notify the user they did something wrong
retList.add(strang);
@@ -263,10 +225,10 @@ public class ServerGrammarReader {
return Integer.parseInt(tokenizer.nextToken());
}
- private static void removeRule(FunctionalStringTokenizer tokenizer, ReaderState state) {
- String ruleName = tokenizer.nextToken();
-
- state.deleteRule(ruleName);
+ private static void initialRule(FunctionalStringTokenizer tokenizer, ReaderState state) {
+ String initialRuleName = tokenizer.nextToken();
+
+ state.setInitialRule(initialRuleName);
}
private static void prefixRule(FunctionalStringTokenizer tokenizer, ReaderState state) {
@@ -278,6 +240,12 @@ public class ServerGrammarReader {
state.prefixRule(ruleName, prefixToken, additionalProbability);
}
+ private static void removeRule(FunctionalStringTokenizer tokenizer, ReaderState state) {
+ String ruleName = tokenizer.nextToken();
+
+ state.deleteRule(ruleName);
+ }
+
private static void suffixRule(FunctionalStringTokenizer tokenizer, ReaderState state) {
String ruleName = tokenizer.nextToken();
String suffixToken = tokenizer.nextToken();
@@ -286,4 +254,73 @@ public class ServerGrammarReader {
state.suffixRule(ruleName, suffixToken, additionalProbability);
}
+
+ private static void doCase(FunctionalStringTokenizer tokenizer, ReaderState state) {
+ int ruleProbability = readOptionalProbability(tokenizer, state);
+
+ state.addCase(ruleProbability, tokenizer.toList());
+ }
+
+ private static void doDefineExpandedVariable(IMap<String, IList<String>> vars, String strang, WeightedGrammar<String> gramm) {
+ String[] varParts = strang.split(":=");
+
+ String varName = varParts[0].substring(2);
+ String ruleName = varParts[1].substring(0, varParts[1].length() - 2);
+
+ IList<String> varValue = gramm.generateGenericValues(
+ ruleName, (s) -> s, " ");
+
+ vars.put(varName, varValue);
+ }
+
+ private static void doDefineVariable(IMap<String, IList<String>> vars, String strang) {
+ String[] varParts = strang.split("=");
+
+ String varName = varParts[0].substring(2);
+ String varValue = varParts[1].substring(0, varParts[1].length() - 2);
+
+ vars.put(varName, new FunctionalList<>(varValue));
+ }
+
+ private static IList<String> doExpandVariableReference(IMap<String, IList<String>> vars, String strang,
+ WeightedGrammar<String> gramm) {
+ IList<String> retList;
+ String[] varParts = strang.substring(1, strang.length()).split("-");
+
+ StringBuilder actualName = new StringBuilder("[");
+
+ for(String varPart : varParts) {
+ if(varPart.startsWith("$")) {
+ IList<String> varName = vars.get(varPart.substring(1));
+
+ if(varName.getSize() != 1) {
+ // @FIXME notify the user they did something wrong
+ }
+
+ actualName.append(varName.first() + "-");
+ } else {
+ actualName.append(varPart + "-");
+ }
+ }
+
+ // Trim trailing -
+ actualName.deleteCharAt(actualName.length() - 1);
+
+ retList = gramm.generateGenericValues(actualName.toString(), (s) -> s, " ");
+ return retList;
+ }
+
+ private static void doNoSpaceRule(String strang, WeightedGrammar<String> gramm, IList<String> retList) {
+ if(!GrammarServerEngine.debugMode) {
+ IList<String> ruleValue = gramm.generateGenericValues(
+ strang, (s) -> s.trim(), "");
+
+ retList.add(ListUtils.collapseTokens(ruleValue));
+ } else {
+ // if(!gramm.hasRule(strang))
+ // System.out.println("Warning: Possible unexpanded rule " + strang);
+
+ retList.add(strang);
+ }
+ }
}