diff options
Diffstat (limited to 'passes')
| -rw-r--r-- | passes/techmap/libparse.cc | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/passes/techmap/libparse.cc b/passes/techmap/libparse.cc index d5254c029..d3b1ff02f 100644 --- a/passes/techmap/libparse.cc +++ b/passes/techmap/libparse.cc @@ -100,8 +100,15 @@ int LibertyParser::lexer(std::string &str)  				break;  		}  		f.unget(); -		// fprintf(stderr, "LEX: identifier >>%s<<\n", str.c_str()); -		return 'v'; +		if (str == "+" || str == "-") { +			/* Single operator is not an identifier */ +			// fprintf(stderr, "LEX: char >>%s<<\n", str.c_str()); +			return str[0]; +		} +		else { +			// fprintf(stderr, "LEX: identifier >>%s<<\n", str.c_str()); +			return 'v'; +		}  	}  	if (c == '"') { @@ -191,6 +198,19 @@ LibertyAst *LibertyParser::parse()  			tok = lexer(ast->value);  			if (tok != 'v')  				error(); +			tok = lexer(str); +			while (tok == '+' || tok == '-' || tok == '*' || tok == '/') { +				ast->value += tok; +				tok = lexer(str); +				if (tok != 'v') +					error(); +				ast->value += str; +				tok = lexer(str); +			} +			if (tok == ';') +				break; +			else +				error();  			continue;  		}  | 
