Do you like my watch? Its a family heirloom. My grandfather sold it to me on his death bed. Woody Allen
The ℙ𝕖𝕡 🙵 ℕ𝕠𝕞 system is a system for parsing and translating context-free languages. It uses the en.wikipedia.org/wiki/Unix text-stream editing philosophy and applies it to formal languages and patterns . I hope you enjoy it! (I do)
This blog written by me, mjb<at>nomlang.org is a set of posts exploring the potential of the Parsing Engine for Patterns (pep) and the Nom scripting language. Nom doesn't “stand for” anything but is similar to an indo-european root for “name” and may also be a vague accolade and reference to Noam Chomsky for his classification of formal languages.
The home page for ℙ𝕖𝕡 🙵 ℕ𝕠𝕞 is located at www.nomlang.org although all the source code, examples , translation scripts and other documentation is at Sourceforge (Thankyou!).
I will try to make these posts as general as possible, exploring ideas of language, parsing, compiling, transpiling and translating (although pep/nom in it’s current form is not suitable for translating natural human language).
I also try to write a general blog about language, culture, art, travel, the garden, making things or whatever which is called Shrob
“Pep” is the Parsing Engine for Patterns and “Nom” is a scripting (and compilable) language for parsing and translating context-free languages . Nom compiles itself and can also translate itself into other languages like go and tcl java and ruby and javascript.
The pep pattern engine and the Nom parsing language form a system for parsing, translating, compiling and transpiling context-free languages. The system is, to some extent, experimental.
The source code is located at Sourceforge and there is also a blog on this server
This site www.nomlang.org also contains extensive documentation for the nom language and the pep virtual machine in the /doc/ folder.
# the lexical analysis phase of the script
while [:space:]; clear;
whilenot [:space:]; put; clear; add "word*"; push;
# the parsing/compiling phase
parse>
pop; pop;
# format as one word per line
"word*word*", "text*word*" {
clear; get; add "\n"; ++; get; --; put; clear;
add "text*"; push; .reparse
}
push; push;
# when the end of the input-stream is encountered
(eof) {
pop; clear; get; print; quit;
}