Hi thierry I imported the generated parsers (a student did a while ago on VW using Smacc). The generated parser parse apparently the tests. Now when I regenerate the parser with Pharo I cannot get the Smacc compuling the parser. I get a SmaCCParserError: Token not expected do you have any idea what would not be supported in the Pharo/Squeak version # # Expression Parser #============================================= goal: expression* ; expression: relation ( ( and | and then | or | or else | xor ) relation )*; relation: simple_expression sndPart?; sndPart: relational_operator simple_expression | ( not )? ( in range | in type_mark); simple_expression: (unary_adding_operator)? term (binary_adding_operator term)*; term: factor (multiplying_operator factor)*; factor: primary ( ** primary)? | abs primary | not primary; #<identifier> instead of name primary: <numeric_lit> | null | <string_lit> | <number> | <identifier> | <identifier> '' <identifier> | function_call | ( expression ) ; #simplified binary_adding_operator: + | - | & ; unary_adding_operator: + | - ; multiplying_operator: * | / | mod | rem ; relational_operator: = | /= | < | <= | > | >= ; #============================================================================= function_call: <identifier> ''identifier'' function_arguments ''args'' { ADFunctionCall withElements: args withName: identifier } ; function_arguments: ( expression ( , expression)* ) ; #==== Declarations =========================================================== discrete_range: range | subtype_indication; #discrete_? subtype_indication: type_mark (constraint)? ; type_mark: type; constraint: range_constraint; range_constraint: range range; range: range_attribute | (simple_expression .. simple_expression); range_attribute: <identifier> '' range ; #cf. 4.1.4 #==== Names ================================================================== name: simple_name | <char_lit> | indexed_component | slice | selected_component | attribute; #operator_symbol prefix: name | function_call; simple_name: <identifier>; indexed_component: prefix ( expression ( , expression )* ) ; slice: prefix ( discrete_range ) ; selected_component: prefix . selector; selector: simple_name | <char_lit> | all ; #operator_symbol attribute: prefix '' attribute_designator; attribute_designator: simple_name ( ( <universal_static_expression> ) )? ; #==== Types: appendix c: package STANDARD plus more ========================================================= type: BOOLEAN | REAL | INTEGER | FLOAT | CHARACTER | DURATION | STRING | RAINBOW ; '
Hi Stef, I don't see unsupported syntax, just missing quotes around some tokens, such as ** should be "**", + should be "+" in binary_adding_operator, etc... BOOLEAN is probably <BOOLEAN> Are you sure that the text you're joining isn't unquoted? It's hard to requote everything as it should be, and not having the lexer definition makes testing with SmaCC a bit painfull. Thierry Le 02/09/2013 12:18, Stéphane Ducasse a écrit :
Hi thierry
I imported the generated parsers (a student did a while ago on VW using Smacc). The generated parser parse apparently the tests. Now when I regenerate the parser with Pharo I cannot get the Smacc compuling the parser. I get a SmaCCParserError: Token not expected
do you have any idea what would not be supported in the Pharo/Squeak version
# # Expression Parser #=============================================
goal: expression* ;
expression: relation ( ( and | and then | or | or else | xor ) relation )*;
relation: simple_expression sndPart?;
sndPart: relational_operator simple_expression | ( not )? ( in range | in type_mark);
simple_expression: (unary_adding_operator)? term (binary_adding_operator term)*;
term: factor (multiplying_operator factor)*;
factor: primary ( ** primary)? | abs primary | not primary;
#<identifier> instead of name primary: <numeric_lit> | null | <string_lit> | <number> | <identifier> | <identifier> '' <identifier> | function_call | ( expression ) ; #simplified
binary_adding_operator: + | - | & ; unary_adding_operator: + | - ; multiplying_operator: * | / | mod | rem ; relational_operator: = | /= | < | <= |
|
= ;
#=============================================================================
function_call: <identifier> ''identifier'' function_arguments ''args'' { ADFunctionCall withElements: args withName: identifier } ;
function_arguments: ( expression ( , expression)* ) ;
#==== Declarations ===========================================================
discrete_range: range | subtype_indication; #discrete_?
subtype_indication: type_mark (constraint)? ;
type_mark: type;
constraint: range_constraint;
range_constraint: range range;
range: range_attribute | (simple_expression .. simple_expression);
range_attribute: <identifier> ''
range ; #cf. 4.1.4
#==== Names ==================================================================
name: simple_name | <char_lit> | indexed_component | slice | selected_component | attribute; #operator_symbol
prefix: name | function_call;
simple_name: <identifier>;
indexed_component: prefix ( expression ( , expression )* ) ;
slice: prefix ( discrete_range ) ;
selected_component: prefix . selector;
selector: simple_name | <char_lit> |
all ; #operator_symbol
attribute: prefix '' attribute_designator;
attribute_designator: simple_name ( ( <universal_static_expression> ) )? ;
#==== Types: appendix c: package STANDARD plus more ========================================================= type: BOOLEAN | REAL | INTEGER | FLOAT | CHARACTER | DURATION |
STRING | RAINBOW ;
'
-- Thierry Goubier CEA list Laboratoire des Fondations des Systèmes Temps Réel Embarqués 91191 Gif sur Yvette Cedex France Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95
I will check because may be the author of the code committed code that does not compile on VW either. Thanks for your hints. stef On Sep 2, 2013, at 12:57 PM, Goubier Thierry <thierry.goubier@cea.fr> wrote:
Hi Stef,
I don't see unsupported syntax, just missing quotes around some tokens, such as ** should be "**", + should be "+" in binary_adding_operator, etc... BOOLEAN is probably <BOOLEAN>
Are you sure that the text you're joining isn't unquoted? It's hard to requote everything as it should be, and not having the lexer definition makes testing with SmaCC a bit painfull.
Thierry
Le 02/09/2013 12:18, Stéphane Ducasse a écrit :
Hi thierry
I imported the generated parsers (a student did a while ago on VW using Smacc). The generated parser parse apparently the tests. Now when I regenerate the parser with Pharo I cannot get the Smacc compuling the parser. I get a SmaCCParserError: Token not expected
do you have any idea what would not be supported in the Pharo/Squeak version
# # Expression Parser #=============================================
goal: expression* ;
expression: relation ( ( and | and then | or | or else | xor ) relation )*;
relation: simple_expression sndPart?;
sndPart: relational_operator simple_expression | ( not )? ( in range | in type_mark);
simple_expression: (unary_adding_operator)? term (binary_adding_operator term)*;
term: factor (multiplying_operator factor)*;
factor: primary ( ** primary)? | abs primary | not primary;
#<identifier> instead of name primary: <numeric_lit> | null | <string_lit> | <number> | <identifier> | <identifier> '' <identifier> | function_call | ( expression ) ; #simplified
binary_adding_operator: + | - | & ; unary_adding_operator: + | - ; multiplying_operator: * | / | mod | rem ; relational_operator: = | /= | < | <= |
|
= ;
#=============================================================================
function_call: <identifier> ''identifier'' function_arguments ''args'' { ADFunctionCall withElements: args withName: identifier } ;
function_arguments: ( expression ( , expression)* ) ;
#==== Declarations ===========================================================
discrete_range: range | subtype_indication; #discrete_?
subtype_indication: type_mark (constraint)? ;
type_mark: type;
constraint: range_constraint;
range_constraint: range range;
range: range_attribute | (simple_expression .. simple_expression);
range_attribute: <identifier> ''
range ; #cf. 4.1.4
#==== Names ==================================================================
name: simple_name | <char_lit> | indexed_component | slice | selected_component | attribute; #operator_symbol
prefix: name | function_call;
simple_name: <identifier>;
indexed_component: prefix ( expression ( , expression )* ) ;
slice: prefix ( discrete_range ) ;
selected_component: prefix . selector;
selector: simple_name | <char_lit> |
all ; #operator_symbol
attribute: prefix '' attribute_designator;
attribute_designator: simple_name ( ( <universal_static_expression> ) )? ;
#==== Types: appendix c: package STANDARD plus more ========================================================= type: BOOLEAN | REAL | INTEGER | FLOAT | CHARACTER | DURATION |
STRING | RAINBOW ;
'
-- Thierry Goubier CEA list Laboratoire des Fondations des Systèmes Temps Réel Embarqués 91191 Gif sur Yvette Cedex France Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95
apparently the fileout 30 in VW corrupts the image and I got many strange definitions so I'm checking Stef On Sep 2, 2013, at 12:18 PM, Stéphane Ducasse <Stephane.Ducasse@inria.fr> wrote:
Hi thierry
I imported the generated parsers (a student did a while ago on VW using Smacc). The generated parser parse apparently the tests. Now when I regenerate the parser with Pharo I cannot get the Smacc compuling the parser. I get a SmaCCParserError: Token not expected
do you have any idea what would not be supported in the Pharo/Squeak version
# # Expression Parser #=============================================
goal: expression* ;
expression: relation ( ( and | and then | or | or else | xor ) relation )*;
relation: simple_expression sndPart?;
sndPart: relational_operator simple_expression | ( not )? ( in range | in type_mark);
simple_expression: (unary_adding_operator)? term (binary_adding_operator term)*;
term: factor (multiplying_operator factor)*;
factor: primary ( ** primary)? | abs primary | not primary;
#<identifier> instead of name primary: <numeric_lit> | null | <string_lit> | <number> | <identifier> | <identifier> '' <identifier> | function_call | ( expression ) ; #simplified
binary_adding_operator: + | - | & ; unary_adding_operator: + | - ; multiplying_operator: * | / | mod | rem ; relational_operator: = | /= | < | <= |
|
= ;
#=============================================================================
function_call: <identifier> ''identifier'' function_arguments ''args'' { ADFunctionCall withElements: args withName: identifier } ;
function_arguments: ( expression ( , expression)* ) ;
#==== Declarations ===========================================================
discrete_range: range | subtype_indication; #discrete_?
subtype_indication: type_mark (constraint)? ;
type_mark: type;
constraint: range_constraint;
range_constraint: range range;
range: range_attribute | (simple_expression .. simple_expression);
range_attribute: <identifier> ''
range ; #cf. 4.1.4
#==== Names ==================================================================
name: simple_name | <char_lit> | indexed_component | slice | selected_component | attribute; #operator_symbol
prefix: name | function_call;
simple_name: <identifier>;
indexed_component: prefix ( expression ( , expression )* ) ;
slice: prefix ( discrete_range ) ;
selected_component: prefix . selector;
selector: simple_name | <char_lit> |
all ; #operator_symbol
attribute: prefix '' attribute_designator;
attribute_designator: simple_name ( ( <universal_static_expression> ) )? ;
#==== Types: appendix c: package STANDARD plus more ========================================================= type: BOOLEAN | REAL | INTEGER | FLOAT | CHARACTER | DURATION |
STRING | RAINBOW ;
'
participants (2)
-
Goubier Thierry -
Stéphane Ducasse