language and parsing
Colombian saying """ Nobody knows who they are working for. """
## NOM EXAMPLE SCRIPTS
This folder contains some example scripts in the [nom] script language. Scripts have the file extension ".pss". These examples can be run using the interpreter and debugger (the "pep" interpreter) or by translating to [nom:translation.links] and then (maybe compiling and) running.
/doc/doc.dir.index.html
contains a list of scripts and documents
in this folder.
Documentation for the [nom] language and [pep] virtual machine is
in the /doc/
.
The scripts which begin with *ro.* are solutions (or attempted solutions) to problems on the www.rosettacode.org site. For example the script ro.balanced.brackets.pss solves the rosetta://balanced.brackets problem .
examples can be run with the interpreter by typing
pep -f eg/script.pss
eg/script.pss
-i
Examples can be translated into [nom:translation.links] by running the appropriate translation script.
translate a nom script into go, compile and run
pep -f tr/translate.go.pss
eg/script.pss > script.go
go build script.go
echo "" | ./script
,,,,
### SOME EXAMPLE SCRIPTS
xml.parse.pss is an [xml] parser and error checker
nom.reference.syntax.pss is a syntax checker for the [nom] language which provides precise error messages.
json.check.pss checks the syntax of a [json] text data file.
text.tohtml.pss transforms a "plain-text" (minimal mark-up) document into html
sed.tojava.pss transpiles a gnu [sed] script into the [java] language (branch syntax with 't' etc is not supported because java has not [goto] statement )
maths.parse.pss parses and error checks arithmetic infix expressions.
maths.to.latex.pss transforms arithmetic, symbolic and logical expressions into printable [latex] formulas.
exp.tolisp.pss transforms an arithmetic infix expression into [lisp] This is a simpler and older version of the 2 scripts above
toybnf.pss translates simple [bnf] type grammar rules into [nom] scripts. This is the basis for a *bnf* style parsing and compiling language
natural.language.pss implements an extremely limited natural language parser.
### IDEAS FOR EXAMPLE SCRIPTS
#### BREAK LINES
A script which breaks lines at a ':' character and indents the remainder 2 spaces *more* than the original line
example
guache: rough, crude, uneducated (from Bacata indigenous language)
# becomes
guache:
rough, crude, uneducated (from Bacata indigenous language)
,,,,
#### DICTIONARY OR GLOSSARY FORMATTING
A script to format a plain-test dictionary into html and [latex] using a standard dictionary format.
### TODO
Make a "table of contents" parser: that is, extract headings from some document and format and accumulate them in a tape cell (probably the first tape cell). Also parse and translate the rest of the document at the same time. This involves making sure that multiple "pop;" statements do not move the tape pointer back to the 1st tape cell. One solution is to use mark/go to realign the tape pointer
#: The ---+ delimiter means that what follows is nom code.
a nom table of contents parser. ----+ begin { ++; mark "top"; } read; # .... more code "token*token*" { clear; get; ++; get; --; put; clear; add "newtoken*"; push; go "top"; } "heading*heading*" { clear; get; add "\n"; ++; get; --; put; clear; add "newtoken*"; push; go "top"; } # I am not even sure that the go "top"; code is # necessary ,,,,
or invent a new drawing/animation/gaming language (getting ambitious which has a slightly more sensible syntax than that of the "logo" language.
The start of a drawing language is implemented in /eg/drawbasic.pss
This is currently implemented as a *transpiler* to [python]