Skip to content

Commit

Permalink
Updated to reasoably working item
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1415 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Kaj Nyström committed Jan 23, 2005
1 parent df51b07 commit d5c8e8c
Show file tree
Hide file tree
Showing 5 changed files with 493 additions and 217 deletions.
38 changes: 22 additions & 16 deletions flat_modelica_parser/src/Makefile.in
Expand Up @@ -2,13 +2,13 @@ CC=gcc
CXX=g++
AR=ar -r

MODELICAPARSER=../../modelica_parser/src
MODELICA_PARSER=../../modelica_parser/src

ANTLR_HOME=@antlrhome@

INCLUDES=-I@antlrinc@ -I$(MODELICAPARSER)
INCLUDES=-I@antlrinc@ -I$(MODELICA_PARSER)

LIBP=-L$(ANTLR_HOME)/lib/cpp/src
LIBP=-L@antlrlib@

CFLAGS =-g -Wall $(INCLUDES) -D DEBUG
CXXFLAGS = $(CFLAGS)
Expand All @@ -17,31 +17,34 @@ ANTLRFLAGS=

LIB = $(LIBP) -lantlr

lexergen= $(MODELICAPARSER)/modelica_lexer.cpp $(MODELICAPARSER)/modelica_lexer.hpp
lexergen= flat_modelica_lexer.cpp flat_modelica_lexer.hpp \
modelicaTokenTypes.hpp modelicaTokenTypes.txt

parsergen= flat_modelica_parser.cpp flat_modelica_parser.hpp \
flat_modelica_parserTokenTypes.hpp flat_modelica_parserTokenTypes.txt

lexersrcs=$(filter %.cpp,$(lexergen))
parsersrcs=$(filter %.cpp,$(parsergen))

lexerobjs=$(lexersrcs:.cpp=.o)
parserobjs=$(parsersrcs:.cpp=.o)

helperobjs = $(MODELICAPARSER)/token_names.o $(MODELICAPARSER)/parse_tree_dumper.o
#helperobjs = parse_tree_dumper.o token_names.o

OBJS += $(parserobjs) $(helperobjs)
OBJS += $(lexerobjs) $(parserobjs)
#$(helperobjs)

all: libflat_modelica_parser.a

lexer:
cd $(MODELICAPARSER); make modelica_lexer; cd ../../flat_modelica_parser2/src

vctarget: $(parsergen)
vctarget: $(lexergen) $(parsergen)

libflat_modelica_parser.a: $(OBJS)
$(AR) $@ $(OBJS)

$(lexergen): flat_modelica_lexer.g
java antlr.Tool $(ANTLRFLAGS) $<

$(parsergen): flat_modelica_parser.g
$(parsergen): flat_modelica_parser.g flat_modelica_lexer.g
java antlr.Tool $(ANTLRFLAGS) $<

.c.o:
Expand All @@ -50,17 +53,20 @@ $(parsergen): flat_modelica_parser.g
.cpp.o:
$(CXX) $(CXXFLAGS) -c $<

test: $(MODELICAPARSER)/modelica_lexer.o libflat_modelica_parser.a test.o
$(CXX) -o test test.o libflat_modelica_parser.a $(MODELICAPARSER)/modelica_lexer.o $(LIB)

test: test.cpp libflat_modelica_parser.a
$(CXX) -o test test.cpp libflat_modelica_parser.a $(LIB) $(INCLUDES)

depend: $(DFILES)

clean:
-rm -f test* *.o *~ core *.core libflat_modelica_parser.a
-rm -f *.o *~ core *.core libflat_modelica_parser.a

reallyclean: clean
-rm -f $(parsergen)
-rm -f $(lexergen) $(parsergen)

flat_modelica_lexer.o:flat_modelica_lexer.cpp flat_modelica_lexer.hpp
flat_modelica_parser.o:flat_modelica_parser.cpp flat_modelica_parser.hpp
#token_names.o:token_names.cpp
#parse_tree_dumper.o:parse_tree_dumper.cpp parse_tree_dumper.hpp
#include $(DFILES)

213 changes: 213 additions & 0 deletions flat_modelica_parser/src/flat_modelica_lexer.g
@@ -0,0 +1,213 @@
header {

}

options {
language = "Cpp";
}

class flat_modelica_lexer extends Lexer;

options {
k=2;
charVocabulary = '\3'..'\377';
exportVocab = flatmodelica;
testLiterals = false;
defaultErrorHandler = false;
}

tokens {
ALGORITHM = "algorithm" ;
AND = "and" ;
ANNOTATION = "annotation" ;
BLOCK = "block" ;
BOUNDARY = "boundary" ;
CODE = "Code" ;
CLASS = "class" ;
CONNECT = "connect" ;
CONNECTOR = "connector" ;
CONSTANT = "constant" ;
DISCRETE = "discrete" ;
EACH = "each" ;
ELSE = "else" ;
ELSEIF = "elseif" ;
ELSEWHEN = "elsewhen" ;
END = "end" ;
ENUMERATION = "enumeration" ;
EQUATION = "equation" ;
ENCAPSULATED = "encapsulated";
EXTENDS = "extends" ;
EXTERNAL = "external" ;
FALSE = "false" ;
FINAL = "final" ;
FLOW = "flow" ;
FOR = "for" ;
FUNCTION = "function" ;
IF = "if" ;
IMPORT = "import" ;
IN = "in" ;
INITIAL = "initial" ;
INNER = "inner" ;
INPUT = "input" ;
LOOP = "loop" ;
MODEL = "model" ;
NOT = "not" ;
OUTER = "outer" ;
OVERLOAD = "overload";
OR = "or" ;
OUTPUT = "output" ;
PACKAGE = "package" ;
PARAMETER = "parameter" ;
PARTIAL = "partial" ;
PROTECTED = "protected" ;
PUBLIC = "public" ;
RECORD = "record" ;
REDECLARE = "redeclare" ;
REPLACEABLE = "replaceable" ;
RESULTS = "results" ;
THEN = "then" ;
TRUE = "true" ;
TYPE = "type" ;
UNSIGNED_REAL = "unsigned_real";
WHEN = "when" ;
WHILE = "while" ;
WITHIN = "within" ;

// SUM = "sum" ;
// ARRAY = "array";

// Extra tokens for RML
ABSTYPE = "abstype";
// AND = "and";
AS = "as";
AXIOM = "axiom";
DATATYPE = "datatype";
FAIL = "fail";
LET = "let";
INTERFACE = "interface";
MODULE = "module";
OF = "of";
RELATION = "relation";
RULE = "rule";
VAL = "val";
WILD = "_";
WITH = "with";
WITHTYPE = "withtype";
}


// ---------
// Operators
// ---------

LPAR : '(' ;
RPAR : ')' ;
LBRACK : '[' ;
RBRACK : ']' ;
LBRACE : '{' ;
RBRACE : '}' ;
EQUALS : '=' ;
ASSIGN : ":=" ;
PLUS : '+' ;
MINUS : '-' ;
STAR : '*' ;
SLASH : '/' ;
DOT : '.' ;
COMMA : ',' ;
LESS : '<' ;
LESSEQ : "<=" ;
GREATER : '>' ;
GREATEREQ : ">=" ;
EQEQ : "==" ;
LESSGT : "<>" ;
COLON : ':' ;
SEMICOLON : ';' ;
POWER : '^' ;
YIELDS : "=>" ;
AMPERSAND : "&" ;
PIPEBAR : "|" ;
COLONCOLON : "::" ;
DASHES : '-' '-' '-' ( '-' )* ;


WS :
( ' '
| '\t'
| ( "\r\n" | '\r' | '\n' ) { newline(); }
)
{ $setType(antlr::Token::SKIP); }
;

ML_COMMENT :
"/*"
(options { generateAmbigWarnings=false; } : ML_COMMENT_CHAR
| {LA(2)!='/'}? '*')*
"*/" { $setType(antlr::Token::SKIP); } ;

protected
ML_COMMENT_CHAR :
("\r\n" | '\n') { newline(); }
| ~('*'|'\n'|'\r')
;

SL_COMMENT :
"//" (~('\n' | '\r') )*
{ $setType(antlr::Token::SKIP); }
;

IDENT options { testLiterals = true; paraphrase = "an identifier";} :
NONDIGIT (NONDIGIT | DIGIT | DOT)*
;

TYVARIDENT options { testLiterals = true; paraphrase = "a type identifier";} :
'\'' NONDIGIT (NONDIGIT | DIGIT)*
;

protected
NONDIGIT : ('_' | 'a'..'z' | 'A'..'Z');

protected
DIGIT :
'0'..'9'
;

protected
EXPONENT :
('e'|'E') ('+' | '-')? (DIGIT)+
;


UNSIGNED_INTEGER :
(( (DIGIT)+ '.' ) => (DIGIT)+ ( '.' (DIGIT)* )
{
$setType(UNSIGNED_REAL);
}
| (DIGIT)+
)
(EXPONENT { $setType(UNSIGNED_REAL); } )?
;

STRING : '"'! (SCHAR | SESCAPE)* '"'!;


protected
SCHAR : (options { generateAmbigWarnings=false; } : ('\n' | "\r\n")) { newline(); }
| '\t'
| ~('\n' | '\t' | '\r' | '\\' | '"');

protected
SESCAPE : '\\' ('\\' | '"' | "'" | '?' | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v');


protected
ESC :
'\\'
( '"'
| '\\'
)
;





0 comments on commit d5c8e8c

Please sign in to comment.