mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 09:53:32 +01:00
Move grammar-related stuff into package jw-grammar
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
930efae39f
commit
c2c409ed4b
8 changed files with 0 additions and 2004 deletions
|
|
@ -1,83 +0,0 @@
|
||||||
NAMESPACE_IN_GENERATED ?= $(FB_NAME)
|
|
||||||
|
|
||||||
# These types are meant to be cut off the tree and turned into hand coded flex
|
|
||||||
# regexes
|
|
||||||
TRIM_SYMBOLS ?=
|
|
||||||
CUT_SYMBOLS ?=
|
|
||||||
IRRELEVANT_SYMBOLS ?=
|
|
||||||
GENERATE_LOG_LEVEL ?= notice
|
|
||||||
FIX_EXTENSIONS ?= discard
|
|
||||||
CHECK_SYMBOLS ?= all
|
|
||||||
ifneq ($(CHECK_SYMBOLS),)
|
|
||||||
OPT_CHECK_SYMBOLS ?= --check-symbols='$(CHECK_SYMBOLS)'
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(GENERATE_CONFIG_FILE),)
|
|
||||||
OPT_CONFIG_FILE ?= --config-file=$(GENERATE_CONFIG_FILE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
GENERATED_STD += $(FB_NAME).l $(FB_NAME).y $(FB_NAME).ebnf $(FB_COMMON_H)
|
|
||||||
GENERATED += $(FB_NAME)-dense.ebnf $(GENERATED_STD)
|
|
||||||
GRAMMAR_INPUT ?= $(FB_NAME)-input.ebnf
|
|
||||||
FB_NAME_PREFIX ?= $(FB_NAME)_
|
|
||||||
FB_HDRDIR ?= include
|
|
||||||
FB_BISON_OUT_EXT ?= cpp
|
|
||||||
FB_FLEX_OUT_EXT ?= cpp
|
|
||||||
FB_CASE_INSENSITIVE ?= true
|
|
||||||
FB_SRC ?= $(filter %.y %.l,$(GENERATED))
|
|
||||||
FB_COMMON_H ?= $(FB_HDRDIR)/$(FB_NAME).h
|
|
||||||
|
|
||||||
INCLUDED_BY_GENERATED += $(FB_COMMON_H) include/lex.$(FB_NAME).h include/$(FB_NAME).tab.h
|
|
||||||
|
|
||||||
GENERATE_PY ?= ./generate.py
|
|
||||||
GENERATE ?= python ./$(GENERATE_PY) --log-level $(GENERATE_LOG_LEVEL) create \
|
|
||||||
--fix-extensions $(FIX_EXTENSIONS) \
|
|
||||||
--unroll-lists \
|
|
||||||
--unroll-options \
|
|
||||||
--unroll-alternatives \
|
|
||||||
--replace-whitespace \
|
|
||||||
$(OPT_CHECK_SYMBOLS) \
|
|
||||||
$(OPT_CONFIG_FILE) \
|
|
||||||
--trim-symbols=$(shell echo $(TRIM_SYMBOLS) | sed 's/ */,/g') \
|
|
||||||
--cut-symbols=$(shell echo $(CUT_SYMBOLS) | sed 's/ */,/g') \
|
|
||||||
--irrelevant-symbols=$(shell echo $(IRRELEVANT_SYMBOLS) | sed 's/ */,/g') \
|
|
||||||
--namespace=$(NAMESPACE_IN_GENERATED) \
|
|
||||||
--includes=$(shell echo $(INCLUDED_BY_GENERATED) | sed 's/ */,/g') \
|
|
||||||
$(CREATE_EXTRA_ARGS)
|
|
||||||
include $(TOPDIR)/make/proj.mk
|
|
||||||
include $(MODDIR)/make/flex-bison.mk
|
|
||||||
include $(MODDIR)/make/py-defs.mk
|
|
||||||
|
|
||||||
all:
|
|
||||||
debug-all:
|
|
||||||
GENERATE_LOG_LEVEL=debug make all 2>&1 | tee run.out
|
|
||||||
|
|
||||||
generate: $(GENERATED)
|
|
||||||
#$(FB_NAME).y: $(FB_COMMON_H) lex.$(FB_NAME).$(FB_FLEX_OUT_EXT)
|
|
||||||
#lex.$(FB_NAME).$(FB_FLEX_OUT_EXT): $(FB_NAME).l
|
|
||||||
|
|
||||||
check: $(GRAMMAR_INPUT) $(GENERATE_PY) Makefile
|
|
||||||
python ./$(GENERATE_PY) --log-level info check --fix-extensions unroll --unroll-lists --unroll-options $(OPT_CHECK_SYMBOLS) $<
|
|
||||||
|
|
||||||
$(FB_NAME)-dense.ebnf: $(GRAMMAR_INPUT) $(GENERATE_PY)
|
|
||||||
python ./$(GENERATE_PY) --log-level $(GENERATE_LOG_LEVEL) create --fix-extensions keep $< $(FB_NAME).ebnf > $@.tmp
|
|
||||||
mv $@.tmp $@
|
|
||||||
|
|
||||||
define generate_rule
|
|
||||||
$(1): $$(GRAMMAR_INPUT) $$(GENERATE_PY) Makefile $(GENERATE_CONFIG_FILE)
|
|
||||||
$$(GENERATE) $$< $$(patsubst $(FB_NAME).%,$(FB_NAME).%,$$@) > $$@.tmp
|
|
||||||
mv $$@.tmp $$@
|
|
||||||
endef
|
|
||||||
$(foreach target,$(GENERATED_STD),$(eval $(call generate_rule,$(target))))
|
|
||||||
|
|
||||||
clean.generated:
|
|
||||||
rm -f $(GENERATED)
|
|
||||||
clean: clean.generated
|
|
||||||
echo-generated:
|
|
||||||
@echo GENERATED = $(GENERATED)
|
|
||||||
|
|
||||||
help:
|
|
||||||
$(GENERATE) --help
|
|
||||||
|
|
||||||
expand-macros:
|
|
||||||
make 2>/dev/null | sed '/g++/ !d; s/g++\|gcc//; s/-o .*//' | xargs g++ -E -C | indent
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
TOPDIR = ../..
|
|
||||||
|
|
||||||
-include local.mk
|
|
||||||
|
|
||||||
EXE_ARGS ?= grammartest.code
|
|
||||||
PREREQ_BUILD += ytools
|
|
||||||
FB_NAME = grammartest
|
|
||||||
NAMESPACE_IN_GENERATED = gt
|
|
||||||
GENERATE_CONFIG_FILE = generate.conf
|
|
||||||
IRRELEVANT_SYMBOLS ?= white_space
|
|
||||||
|
|
||||||
include $(TOPDIR)/make/proj.mk
|
|
||||||
include $(TOPDIR)/make/generate-flex-bison.mk
|
|
||||||
include $(MODDIR)/make/exe.mk
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
[symbols]
|
|
||||||
|
|
||||||
[white_space[
|
|
||||||
type = token
|
|
||||||
lex_extra_action = "if memchr(yytext, '\n', yyleng) context->line++;"
|
|
||||||
regex = "[ \n\t\r]+"
|
|
||||||
]
|
|
||||||
|
|
||||||
[all_characters[
|
|
||||||
type = non-terminal
|
|
||||||
regex = "[[:print:]]"
|
|
||||||
#lex_as = yytext[0]
|
|
||||||
]
|
|
||||||
|
|
||||||
[test[
|
|
||||||
type = token
|
|
||||||
dings = bums
|
|
||||||
regex = "bumsdings"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import jwutils
|
|
||||||
|
|
||||||
jwutils.run_sub_commands('generate Test parser files', modules = ['jwutils.grammar'])
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
(* a simple program syntax in EBNF − Wikipedia *)
|
|
||||||
program = 'PROGRAM', white space, identifier, white space,
|
|
||||||
'BEGIN', white space,
|
|
||||||
{ assignment, ";", white space },
|
|
||||||
'END.', [ white space ];
|
|
||||||
identifier = alphabetic character, { alphabetic character | digit } ;
|
|
||||||
number = [ "-" ], digit, { digit } ;
|
|
||||||
string = '"' , { all characters }, '"' ;
|
|
||||||
assignment = identifier , ":=" , ( number | identifier | string ) ;
|
|
||||||
alphabetic character = "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" ;
|
|
||||||
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
|
|
||||||
white space = ? white space characters ? ;
|
|
||||||
all characters = ? all visible characters ? ;
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
PROGRAM DEMO1
|
|
||||||
BEGIN
|
|
||||||
A:=3;
|
|
||||||
B:=45;
|
|
||||||
H:=-100023;
|
|
||||||
C:=A;
|
|
||||||
D123:=B34A;
|
|
||||||
BABOON:=GIRAFFE;
|
|
||||||
END.
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include <slog.h>
|
|
||||||
#include <YMisc.h>
|
|
||||||
|
|
||||||
#include "include/grammartest.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main(int argc, const char *argv[])
|
|
||||||
{
|
|
||||||
if (argc < 2) {
|
|
||||||
fprintf(stderr, "usage: %s input-file\n", filenotdir(argv[0]));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *path = argv[1];
|
|
||||||
string content;
|
|
||||||
if (YMisc::suck_in_file(path, content)<0) {
|
|
||||||
slog(PRI_ERR, "failed to read [%s] (%s)", path, err());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FB_SYM(create_ast)(content.c_str())<0) {
|
|
||||||
slog(PRI_ERR, "failed to create AST from [%s] (%s)", path, err());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue