parser: add a basic sabblecc3 parser in Java
[nit.git] / src / parser / Makefile
index 362d6a5..04657cc 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SABLECC=sablecc3
+SABLECC3ALTGEN ?= sablecc3
 
 all: parser.nit
 
 # Preprocess the extended sablecc gramar
 .nit.sablecc3: nit.sablecc3xx
-       ./prescc.sh $< $@
+       ./prescc.pl $< > $@
 
 # Note that parser_nodes is no more automatically synced with the grammar
 parser.nit: .nit.sablecc3 xss/*.xss
-       ${SABLECC} -c .nit.sablecc3.dump -t xss/main.xss -p usermodule parser_nodes .nit.sablecc3
-       LANG=C sed -i -e 's/\([ \[]\)P\([A-Z]\)/\1A\2/g' parser.nit parser_abs.nit parser_prod.nit parser_tables.nit lexer.nit
+       @${SABLECC3ALTGEN -license} >/dev/null 2>/dev/null || ( echo "***\n*** sablecc3 altgen version is needed.\n*** Set the environment variable SABLECC3ALTGEN to the executable.\n*** Aborting...\n***" ; exit 1 )
+       @${SABLECC3ALTGEN} | grep altgen >/dev/null 2>/dev/null || ( echo "***\n*** $$SABLECC3ALTGEN is not the sablecc3 altgen version.\n*** Set the environment variable SABLECC3ALTGEN to the executable.\n*** Aborting...\n***"; exit 1 )
+       ${SABLECC3ALTGEN} -c .nit.sablecc3.dump -t xss/main.xss -p usermodule parser_nodes .nit.sablecc3
+       mv -f -- parser.nit .parser-nofact.nit
+       ./fact_parser.pl .parser-nofact.nit > parser.nit
+       perl -np -i.orig -e 's/([ (\[])P([A-Z])/\1A\2/g;' -e 's/"{"/"\\{"/g;' parser.nit parser_abs.nit parser_prod.nit lexer.nit
 
 clean:
-       rm -f -- .nit.sablecc3 .nit.sablecc3.dump || true
+       rm -f -- .nit.sablecc3 .nit.sablecc3.dump .parser-nofact.nit || true
 
-dist-clean: clean
-       rm -f -- parser.nit parser_abs.nit parser_prod.nit parser_tables.nit lexer.nit || true
+maintainer-clean: clean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f -- parser.nit parser_abs.nit parser_prod.nit lexer.nit || true
+
+java: .nit.sablecc3
+       rm -r org/nitlanguage/gen/analysis/ org/nitlanguage/gen/lexer/ org/nitlanguage/gen/node/ org/nitlanguage/gen/parser/
+       ${SABLECC3ALTGEN} .nit.sablecc3 -c .nit.sablecc3.dump
+       javac org/nitlanguage/gen/TestParser.java