2012-03-06 18 views
21

मैं एक lexer जनरेटर मुझे ऐसा करने में मदद करने के सी #, सी ++, आदि के लिए Matlab भाषा का एक बुनियादी सबसेट कन्वर्ट करने के लिए लिखने के लिए चाहते हैं, मैं matlab के लिए औपचारिक व्याकरण युक्त एक दस्तावेज प्राप्त करना चाहते हैं। इसकी जांच करने में थोड़ी देर बिताई, ऐसा लगता है कि गणित एक प्रदान नहीं करते हैं। क्या कोई जानता है कि मुझे ऐसा दस्तावेज़ कहां मिल सकता है?मैटलैब के लिए औपचारिक व्याकरण कहां मिल सकता है?

+5

मुझे दृढ़ता से संदेह है कि गणित Matlab के लिए औपचारिक व्याकरण परिभाषित नहीं करता है। मैं इसके जवाब के लिए देखता हूँ। –

+3

ऑक्टवे Matlab के व्याकरण parses। हो सकता है कि वे पहले से ही क्या कर रहे हैं। –

+2

ऑक्टेव स्रोत में [lex फ़ाइल] (http://hg.savannah.gnu.org/hgweb/octave/file/c1f9b54350f9/src/lex.ll) सहायक है। मुझे एक [एंटील पार्सर] भी मिला है (http://www.antlr.org/pipermail/antlr-interest/2011- सितंबर 0445151.html) जो मैटलैब को सी और जावा में परिवर्तित करता है। –

उत्तर

5

बहुत बढ़िया अवसर अपनी खुद की औपचारिक व्याकरण :)

आप व्याकरण अपने आप को लिखने के लिए चुनना चाहिए, तो मैं BNFC सिफारिश कर सकते हैं जो एक औपचारिक BNF व्याकरण लेने के लिए और एक के लिए डाटा संरचनाओं और lexers/पारसर्स निर्माण कर सकते हैं लिखने के लिए लक्षित भाषाओं में से कुछ (सी/सी ++, सी #, जावा, हास्केल इत्यादि)। यह आपको बहुत समय बचाएगा और आपको व्याकरण तैयार करने पर ध्यान केंद्रित करेगा, और उसके बाद वरीयता की अपनी भाषा में कनवर्टर को लागू करने का अधिकार प्राप्त करें।

और कुछ नहीं करते हैं, तो BNFC के लिए लिंक कुछ मदद और कैसे एक BNF व्याकरण तैयार करने के लिए संकेतों के शामिल हैं। शुभकामनाएँ!

+0

सलाह के लिए धन्यवाद, मैं एक नज़र रखूंगा। मैं fslex और fsyacc का उपयोग करने के बारे में सोच रहा था। –

6

यह पूरा व्याकरण लेकिन yacc-keable for matlab इस से वर्ष 2000 में एक संकलक पाठ्यक्रम के लिए प्रदान नहीं की है, तो आप आसानी BNF और EBNF बना सकते हैं।

primary_expression 
     : IDENTIFIER     
     | CONSTANT  
     | STRING_LITERAL   
     | '(' expression ')' 
     | '[' ']' 
     | '[' array_list ']' 
     ; 

postfix_expression 
     : primary_expression 
     | array_expression 
     | postfix_expression TRANSPOSE 
     | postfix_expression NCTRANSPOSE 
     ; 

index_expression 
     : ':' 
     | expression 
     ; 

index_expression_list 
     : index_expression 
     | index_expression_list ',' index_expression 
     ; 

array_expression 
     : IDENTIFIER '(' index_expression_list ')' 
     ; 

unary_expression 
     : postfix_expression 
     | unary_operator postfix_expression 
     ; 

unary_operator 
     : '+' 
     | '-' 
     | '~' 
     ; 

multiplicative_expression 
     : unary_expression 
     | multiplicative_expression '*' unary_expression 
     | multiplicative_expression '/' unary_expression 
     | multiplicative_expression '\\' unary_expression 
     | multiplicative_expression '^' unary_expression 
     | multiplicative_expression ARRAYMUL unary_expression 
     | multiplicative_expression ARRAYDIV unary_expression 
     | multiplicative_expression ARRAYRDIV unary_expression 
     | multiplicative_expression ARRAYPOW unary_expression 
     ; 

additive_expression 
     : multiplicative_expression 
     | additive_expression '+' multiplicative_expression 
     | additive_expression '-' multiplicative_expression 
     ; 

relational_expression 
     : additive_expression 
     | relational_expression '<' additive_expression 
     | relational_expression '>' additive_expression 
     | relational_expression LE_OP additive_expression 
     | relational_expression GE_OP additive_expression 
     ; 

equality_expression 
     : relational_expression 
     | equality_expression EQ_OP relational_expression 
     | equality_expression NE_OP relational_expression 
     ; 

and_expression 
     : equality_expression 
     | and_expression '&' equality_expression 
     ; 

or_expression 
     : and_expression 
     | or_expression '|' and_expression 
     ; 

expression 
     : or_expression 
    | expression ':' or_expression 
    ; 

assignment_expression 
     : postfix_expression '=' expression 

eostmt 
     : ',' 
     | ';' 
     | CR 
     ; 

statement 
     : global_statement 
     | clear_statement 
     | assignment_statement 
     | expression_statement 
     | selection_statement 
     | iteration_statement 
     | jump_statement 
     ; 

statement_list 
     : statement 
     | statement_list statement 
     ; 

identifier_list 
     : IDENTIFIER 
     | identifier_list IDENTIFIER 
     ; 

global_statement 
     : GLOBAL identifier_list eostmt 
     ; 

clear_statement 
     : CLEAR identifier_list eostmt 
     ; 

expression_statement 
     : eostmt 
     | expression eostmt 
     ; 

assignment_statement 
     : assignment_expression eostmt 
     ; 

array_element 
     : expression 
     | expression_statement 
     ; 

array_list 
     : array_element 
     | array_list array_element 
     ; 

selection_statement 
     : IF expression statement_list END eostmt 
     | IF expression statement_list ELSE statement_list END eostmt 
     | IF expression statement_list elseif_clause END eostmt 
     | IF expression statement_list elseif_clause 
      ELSE statement_list END eostmt 
     ; 

elseif_clause 
     : ELSEIF expression statement_list 
    | elseif_clause ELSEIF expression statement_list 
     ; 

iteration_statement 
     : WHILE expression statement_list END eostmt 
     | FOR IDENTIFIER '=' expression statement_list END eostmt 
     | FOR '(' IDENTIFIER '=' expression ')' statement_list END eostmt 
     ; 

jump_statement 
     : BREAK eostmt 
     | RETURN eostmt 
     ; 

translation_unit 
     : statement_list 
     | FUNCTION function_declare eostmt statement_list 
     ; 

func_ident_list 
     : IDENTIFIER 
     | func_ident_list ',' IDENTIFIER 
     ; 

func_return_list 
     : IDENTIFIER 
     | '[' func_ident_list ']' 
     ; 

function_declare_lhs 
     : IDENTIFIER 
     | IDENTIFIER '(' ')' 
     | IDENTIFIER '(' func_ident_list ')' 
     ; 

function_declare 
     : function_declare_lhs 
     | func_return_list '=' function_declare_lhs 
     ; 
4

डेव विनगेट कुछ Antler संसाधन है कि एक शानदार जगह शुरू करने के लिए की तरह लग रहे प्रदान करता है। जैसा कि उसकी रीडमे फ़ाइल में उल्लेख किया गया है, इसमें ट्रांज़ेप ऑपरेटर और कुछ अन्य मुश्किल पार्स शामिल नहीं हैं।
http://web.mit.edu/~wingated/www/resources.html

मैटलैब (1999) के पिछले संस्करणों की मुश्किल बिट्स से कुछ भी नॉर्थवेस्टर्न से एक समूह द्वारा एक दस्तावेज में वर्णित हैं: mparser लिंक यहाँ देखें। इसमें ईबीएनएफ-जैसे विवरण शामिल हैं। यह कुछ फुटनोट्स में कुछ गंदे बिट्स को भी रेखांकित करता है।
http://www.ece.northwestern.edu/cpdc/pjoisha/MAGICA/CPDC-TR-9909-017.pdf

मैं अन्य कम प्रासंगिक स्रोतों में से एक जोड़े को एकत्र किया है, लेकिन stackoverflow के संपादक बॉट मुझसे कहता है मैं काफी प्रतिष्ठा बिंदु दो से अधिक लिंक पोस्ट करने की जरूरत नहीं है।

0

आप MATLAB अनुकूल शुरू कर सकते हैं -> अजगर कनवर्टर smop है जो अपने आप पायथन में लिखा है। यह PLY (पायथन lex - yacc) का उपयोग करता है। lexer.py और parse.py से शुरू होने वाली फ़ाइलों में आप रुचि रखते हैं।

MATLAB से अजगर को कन्वर्टर्स की सूची के लिए भी this answer देखें।

संबंधित मुद्दे